Files

47 lines
1.5 KiB
Bash

#!/bin/bash
# Send voice message to Feishu/Lark
# Usage: send_feishu_voice.sh <ogg_file> <receive_id> <tenant_access_token> [receive_id_type]
# receive_id_type: open_id (default), chat_id, user_id, union_id, email
set -e
OGG_FILE="$1"
RECEIVE_ID="$2"
TOKEN="$3"
ID_TYPE="${4:-open_id}"
API_BASE="https://open.feishu.cn/open-apis"
if [ -z "$OGG_FILE" ] || [ -z "$RECEIVE_ID" ] || [ -z "$TOKEN" ]; then
echo "Usage: send_feishu_voice.sh <ogg_file> <receive_id> <token> [receive_id_type]"
exit 1
fi
# 1. Get duration in milliseconds
DURATION_SEC=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$OGG_FILE")
DURATION_MS=$(python3 -c "print(int(float('$DURATION_SEC') * 1000))")
# 2. Upload file to Feishu
UPLOAD_RESP=$(curl -s -X POST "$API_BASE/im/v1/files" \
-H "Authorization: Bearer $TOKEN" \
-F "file_type=opus" \
-F "file_name=voice.ogg" \
-F "duration=$DURATION_MS" \
-F "file=@$OGG_FILE")
FILE_KEY=$(echo "$UPLOAD_RESP" | python3 -c "import json,sys; print(json.load(sys.stdin).get('data',{}).get('file_key',''))")
if [ -z "$FILE_KEY" ]; then
echo "Upload failed: $UPLOAD_RESP"
exit 1
fi
echo "Uploaded: file_key=$FILE_KEY"
# 3. Send audio message
SEND_RESP=$(curl -s -X POST "$API_BASE/im/v1/messages?receive_id_type=$ID_TYPE" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"receive_id\":\"$RECEIVE_ID\",\"msg_type\":\"audio\",\"content\":\"{\\\"file_key\\\":\\\"$FILE_KEY\\\"}\"}")
echo "Send result: $SEND_RESP"