Docker イメージ | よくある質問
小さな WeChat ロボット Webhook は、http リクエストに基づいており、Web API に基づいているため、Arm などのデバイスに導入できるという利点があります。建築。
注意
現在、このプロジェクトはウェブ WeChat をベースにしているため、それ自体が制限されるリスクがあり、通常の機能修復に加えて、新しい機能のリクエストは受け付けられません。 Windows プロトコルは現在 WIP 中であり、近い将来にお届けできるようになるはずです。
関数 | ウェブプロトコル | ウィンドウズプロトコル |
---|---|---|
現在の空き状況 | ✅ | |
コードブランチ | 主要 | 窓 |
ドッカータグ | 最新 | 窓 |
<メッセージ送信> | ✅単一/複数/グループ | ✅単一/複数/グループ |
テキストを送信する | ✅ | ✅ |
写真を送信する | ✅ ローカル画像/URL画像分析 | ✅ ローカル画像/URL画像分析 |
ビデオ(mp4)を送信する | ✅ ローカルビデオ/URLビデオ分析 | |
書類の送信 | ✅ ローカルファイル/URLファイルの解析 | ✅ ローカルファイル/URLファイルの解析 |
<メッセージ受信> | ||
テキストを受信する | ✅ | ✅ |
音声を受信する | ✅ | |
写真を受け取る | ✅ | |
ビデオを受信する | ✅ | |
ファイルを受信する | ✅ | |
公開アカウントのツイートリンクを受け取る | ✅ | |
システム通知を受信する | ✅ オンライン通知/オフライン通知/異常通知 | |
アバターの取得 | ✅ | |
素早い返信 | ✅ | ✅ |
<グループ管理> | ||
<フレンド管理> | ||
友達リクエストを受け取る | ✅ | |
友達経由でリクエスト | ✅ | |
連絡先リストを取得する | ||
<その他の機能> | ||
切断せずに自動ログイン | ✅ | |
API認証 | ✅ | ✅ |
n8n シームレスアクセス | ✅ | |
Docker のデプロイメントをサポートする | ✅ arm64 / amd64 | ✅ amd64 |
ログファイルのエクスポート | ✅ | ✅ |
上記の機能はまだ実装されていません。WeChat プロトコルの制限により、すべての機能がサポートされているわけではありません。
npx wechatbot-webhook
切断されない限り、最後のログインがデフォルトで記憶されます。アカウントを変更するには、次のコマンド
npx wechatbot-webhook -r
を実行してください。
インストール エラーが発生した場合は、ノードのバージョンが 18.14.1 #227 以上であることを確認してください。
コマンド ラインからプッシュ メッセージ API をコピーします (例: http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN])
新しいターミナルを開き、次のカールを試してください。 to フィールドと token フィールドの値を希望の値に変更します。
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' { "to": "测试昵称", data: { "content": "Hello World!" }} '
重要
パッケージ マネージャーは pnpm に移行されました。これを使用して依存関係をインストールし、不規則な一時パッケージ パッチをサポートし、依存関係のインストールを高速化してください。
docker pull dannicool/docker-wechatbot-webhook
# 启动容器并映射日志目录,日志按天维度生成,e.g: app.2024-01-01.log
docker run -d --name wxBotWebhook -p 3001:3001
-v ~ /wxBot_logs:/app/log
dannicool/docker-wechatbot-webhook
wget -O docker-compose.yml https://cdn.jsdelivr.net/gh/danni-cool/wechatbot-webhook@main/docker-compose.yml && docker-compose down && docker-compose -p wx_bot_webhook up
docker logs -f wxBotWebhook
QRコードのログインアドレス、画像下のURL部分を見つけてブラウザでアクセスし、コードをスキャンしてwxにログインします
https://localhost:3001/login?token=[YOUR_PERSONAL_TOKEN]
ヒント: -e を使用してパラメータを追加し、複数の行を で区切る必要があります (例: -e RECVD_MSG_API="https://example.com/your/url" )
関数 | 変数 | 述べる |
---|---|---|
ログレベル | LOG_LEVEL=情報 | ログ レベル (デフォルトは info) は、現在のログ出力にのみ影響します。詳細な出力にはデバッグの使用を検討してください。この値がどのように変化しても、ログ ファイルには常にデバッグ レベルのログが記録されます。 |
メッセージ受信API | RECVD_MSG_API=https://example.com/your/url | メッセージに基づくリンクなど、メッセージ受信のロジックを自分で処理したい場合は、処理ロジックの URL を入力します。 |
自分が送信したメッセージを受け付けるメッセージ受信API | ACCEPT_RECVD_MSG_MYSELF=false | RECVD_MSG_API 自分自身からのメッセージを受信するかどうか (true に設定すると受信する、デフォルトは false) |
カスタムログインAPIトークン | LOGIN_API_TOKEN=abcdefg123 | 独自のログイン トークンをカスタマイズすることもできます。設定しない場合は、デフォルトで生成されます。 |
自動ログインを無効にする | DISABLE_AUTO_LOGIN=true | WeChat 以外のアカウントを追い出すには、現在ログインしているセッションに依存してログインを回避できます。毎回 QR コードをスキャンしてログインする必要がある場合は、この設定を追加します。 |
v2 バージョンのインターフェースにはグループ送信機能が追加されています。v1 バージョンのインターフェースについては、legacy-api に移動してください。
POST
application/json
payload
構造テキストまたはファイルを外部リンクに送信すると、外部リンクは画像またはファイルに解析されます。
パラメータ | 説明する | データ型 | デフォルト値 | 空いていてもいいですか | オプションのパラメータ |
---|---|---|---|---|---|
に | メッセージ受信者の場合、受信したString デフォルトでニックネームに送信されます (同じことがグループ名にも当てはまります) 受信したObject 構造は、メモを作成した人に送信できます (例: {alias: '备注名'} 。 {alias: '备注名'} 。グループ名はノート名をサポートしていません。 | String Object | - | N | - |
部屋 | メッセージをグループに送信するかどうかは、技術的な処理の観点からニックネームは実際にはグループ名と同じであるため、このパラメータによって、誰かを探すときにグループを探すか個人を探すかが決まります。 | Boolean | false | Y | true false |
データ | メッセージ本文の構造。下記のpayload.data を参照してください。 | Object Array | false | N | true false |
payload.data
構造体パラメータ | 説明する | データ型 | デフォルト値 | 空いていてもいいですか | オプションのパラメータ |
---|---|---|---|---|---|
タイプ | メッセージ タイプ。フィールドを空白のままにして、プレーン テキストに解析します。 | text String テキスト | - | Y | text fileUrl |
コンテンツ | メッセージのコンテンツ、複数の URL を送信して解析する場合は、 type を fileUrl として指定します。同時に、コンテンツ内の URL を英語のカンマで区切って入力します。 | String | - | N | - |
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": { "content": "你好" }
} '
場合によっては、URL ファイル名を直接送信することが望ましくない場合があります。クエリ パラメーター
$alias
使用して URL を結合し、ターゲットに送信するファイル名を指定できます (注: エイリアスはファイル変換を実行しません)。
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": {
"type": "fileUrl" ,
"content": "https://download.samplelib.com/jpeg/sample-clouds-400x300.jpg?$alias=cloud.jpg"
}
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testGroup",
"isRoom": true,
"data": { "type": "fileUrl" , "content": "https://download.samplelib.com/jpeg/sample-clouds-400x300.jpg" },
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' {
"to": "testUser",
"data": [
{
"type": "text",
"content": "你好"
},
{
"type": "fileUrl",
"content": "https://samplelib.com/lib/preview/mp3/sample-3s.mp3"
}
]
} '
curl --location ' http://localhost:3001/webhook/msg/v2?token=[YOUR_PERSONAL_TOKEN] '
--header ' Content-Type: application/json '
--data ' [
{
"to": "testUser1",
"data": {
"content": "你好"
}
},
{
"to": "testUser2",
"data": [
{
"content": "你好"
},
{
"content": "近况如何?"
}
]
}
] '
response
構造体success
: メッセージが正常に送信されたかどうか。グループメッセージの一部が正常に送信された場合でもtrue
message
: エラーが発生したときに表示されるメッセージtask
: タスクの詳細を送信しますtask.successCount
: 送信された成功メッセージの数task.totalCount
: メッセージの総数task.failedCount
: 送信に失敗したメッセージの数task.reject
: パラメータ検証の失敗によるパラメータとエラー プロンプトtask.sentFailed
: 送信に失敗し、エラー プロンプトが表示されたためtask.notFound
: ユーザーまたはグループが見つからず、エラー プロンプトが表示されるため単一メッセージ送信の一貫性を確保します。特定のパラメータを検証しないと、すべてのメッセージ送信タスクが終了します。
{
"success" : true ,
"message" : " " ,
"task" : {
"successCount" : 0 ,
"totalCount" : 0 ,
"failedCount" : 0 ,
"reject" : [],
"sentFailed" : [],
"notFound" : []
}
}
現在、ファイルの読み取りでは単一の送信のみがサポートされています。
POST
multipart/form-data
payload
構造パラメータ | 説明する | データ型 | デフォルト値 | 空いていてもいいですか | オプションの値 |
---|---|---|---|---|---|
に | メッセージ受信者の場合、受信文字String デフォルトでニックネームに送信されます (グループ名にも同じことが当てはまります)。受信 Json 文字列構造は、メモを作成した人への送信をサポートしています。例: --form 'to=。 "{alias: "小号"}" '、グループ名はコメント名をサポートしていません | String | - | N | - |
部屋 | グループ メッセージを送信するかどうか。formData プレーン テキストはString タイプのみを使用できます1 ははいを表し、 0 はいいえを表します。 | String | 0 | Y | 1 0 |
コンテンツ | ファイル、ローカル ファイルは一度に 1 つだけ送信でき、複数のファイルは手動で複数回呼び出されます | Binary | - | N | - |
curl --location --request POST ' http://localhost:3001/webhook/msg?token=[YOUR_PERSONAL_TOKEN] '
--form ' to=testGroup '
--form content=@ " $HOME /demo.jpg "
--form ' isRoom=1 '
response
構造体{
"success" : true ,
"message" : " Message sent successfully "
}
payload
構造POST
multipart/form-data
フォームデータ | 説明する | データ型 | オプションの値 | 例 |
---|---|---|---|---|
タイプ | 機能の種類
その他のタイプ
システムタイプ
| String | text file urlLink friendship unknown system_event_login system_event_logout system_event_error system_event_push_notify | - |
コンテンツ | 転送されたコンテンツ、テキスト、または転送されたファイルはこのフィールドを共有します。構造マッピングの例を参照してください。 | String Binary | 例 | |
ソース | メッセージ関連の送信者データ、JSON 文字列 | String | 例 | |
言及されています | メッセージは @mymessage #38 です | String | 1 0 | - |
自分からのメッセージです | 自分からのメッセージですか #159 | String | 1 0 | - |
通常、formData のサーバー側の処理には、対応するハンドラーが必要です。この手順が完了していると、次のリクエストが表示されます。
{
"type" : " text " ,
"content" : "你好" ,
"source" : " { " room " : "" , " to " :{ " _events " :{}, " _eventsCount " :0, " id " : " @f387910fa45 " , " payload " :{ " alias " : "" , " avatar " : " /cgi-bin/mmwebwx-bin/webwxgeticon?seq=1302335654&username=@f38bfd1e0567910fa45&skey=@crypaafc30 " , " friend " :false, " gender " :1, " id " : " @f38bfd1e10fa45 " , " name " : " ch. " , " phone " :[], " star " :false, " type " :1}}, " from " :{ " _events " :{}, " _eventsCount " :0, " id " : " @6b5111dcc269b6901fbb58 " , " payload " :{ " address " : "" , " alias " : "" , " avatar " : " /cgi-bin/mmwebwx-bin/webwxgeticon?seq=123234564&username=@6b5dbb58&skey=@crypt_ec356afc30 " , " city " : " Mars " , " friend " :false, " gender " :1, " id " : " @6b5dbd3facb58 " , " name " : " Daniel " , " phone " :[], " province " : " Earth " , " signature " : "" , " star " :false, " weixin " : "" , " type " :1}}} " ,
"isMentioned" : " 0 " ,
"isMsgFromSelf" : " 0 " ,
"isSystemEvent" : " 0 " // 考虑废弃,请使用type类型判断系统消息
}
受信メッセージ API のカールの例 (デバッグのために postman に直接インポート)
curl --location 'https://your.recvdapi.com'
--form 'type="file"'
--form 'content=@"/Users/Downloads/13482835.jpeg"'
--form 'source="{\"room\":\"\",\"to\":{\"_events\":{},\"_eventsCount\":0,\"id\":\"@f387910fa45\",\"payload\":{\"alias\":\"\",\"avatar\":\"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1302335654&username=@f38bfd1e0567910fa45&skey=@crypaafc30\",\"friend\":false,\"gender\":1,\"id\":\"@f38bfd1e10fa45\",\"name\":\"ch.\",\"phone\":[],\"star\":false,\"type\":1}},\"from\":{\"_events\":{},\"_eventsCount\":0,\"id\":\"@6b5111dcc269b6901fbb58\",\"payload\":{\"address\":\"\",\"alias\":\"\",\"avatar\":\"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=123234564&username=@6b5dbb58&skey=@crypt_ec356afc30\",\"city\":\"Mars\",\"friend\":false,\"gender\":1,\"id\":\"@6b5dbd3facb58\",\"name\":\"Daniel\",\"phone\":[],\"province\":\"Earth\",\"signature\":\"\",\"star\":false,\"weixin\":\"\",\"type\":1}}}"'
--form 'isMentioned="0"'
response
構造体(オプション)
RECVD_MSG_API
使用してメッセージを受信後、すぐに返信(クイック返信)したい場合は、以下の構造に従って戻り値を返してください。戻り値がない場合、メッセージは返信されません。
json
パラメータ | 説明する | データ型 | デフォルト値 | 空いていてもいいですか | オプションのパラメータ |
---|---|---|---|---|---|
成功 | リクエストが成功したかどうかにかかわらず、false が返されるか、このフィールドが存在しない場合、友人への招待の追加など、一部の特別なメッセージもこのフィールドによって制御されます。 true が返された場合、友人リクエストは処理されません。処理される。 | Boolean | - | Y | true false |
データ | メッセージに返信する必要がある場合は、データフィールドを定義する必要があります | Object Object Array | - | Y |
response.data
構造パラメータ | 説明する | データ型 | デフォルト値 | 空いていてもいいですか | オプションのパラメータ |
---|---|---|---|---|---|
タイプ | メッセージ タイプ。このフィールドが入力されていない場合は、デフォルトでテキスト タイプの送信になります。 | String | text | Y | text fileUrl |
コンテンツ | メッセージのコンテンツ、複数の URL を送信して解析する場合は、 type を fileUrl として指定します。同時に、コンテンツ内の URL を英語のカンマで区切って入力します。 | String | - | N | - |
単一のメッセージに返信する場合
{
"success" : true ,
"data" : {
"type" : " text " ,
"content" : " hello world! "
}
}
複数のメッセージへの返信を結合する
{
"success" : true ,
"data" : [
{
"type" : " text " ,
"content" : " hello world! "
},
{
"type" : " fileUrl " ,
"content" : " https://samplelib.com/lib/preview/mp3/sample-3s.mp3 "
}
]
}
Docker の起動時にトークンを構成することに加えて、デフォルト トークンの場合、デフォルト トークンがデフォルトで生成され、
.env
ファイルに書き込まれます。
/login
GET
200
現在のユーザーを含む json を返します
{ "success" : true , "message" : " Contact<TestUser>is already login " }
WeChat ログイン スキャン コード ページを表示する
インターフェイスをアクティブにポーリングして、サービスが正常に実行されているかどうかを確認できます。
/healthz
GET
200
WeChat にログインしている場合は、プレーン テキストのhealthy
が返され、それ以外の場合はunHealthy
が返されます。
バージョン 2.8.0 以降、このインターフェイスを通じてアバターなどの静的リソースにアクセスできるようになりました。詳細については、recvd_api データ構造例のアバター フィールドを参照してください。
recvd_api に報告されるすべての静的リソース アドレスにはデフォルトではトークンがないため、自分で結合する必要があることに注意してください。結合しないと 401 エラーが返されます。WeChat でログインしていることを確認し、リソースを取得する必要があります。ログイン状態。
アドレス: /resouces
メソッド: GET
クエリ:
/avatar/1234567890.jpg
としてavatar%2F1234567890.jpg
ステータス: 200
404
401
例: http://localhost:3001/resouces?media=%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxgetheadimg%3Fseq%3D83460%26username%3D%40%4086815a%26skey%3D&token=[YOUR_PERSONAL_TOKEN]
200
リソースを正常に取得し、静的リソース ファイルを返します。
404
リソースの取得に失敗しました
401
はログイン トークンが含まれていません{ "success" : false , "message" : " Unauthorized: Access is denied due to invalid credentials. " }
401
WeChat ログインステータスの有効期限が切れました{
"success" : false , "message" : " you must login first "
}
貢献者の皆様に感謝します!
更新された内容については、CHANGELOG を参照してください。