メインコンテンツまでスキップ

メッセージングプラットフォーム

Messaging Channelを使うと、普段使っているサービスから常駐Anyy Gatewayと会話できます。設定済みの各アカウントには、独自の接続プロファイル、認証情報、ダイレクト/グループのアクセスポリシーがあります。

対応プラットフォーム​

現在のチャンネルカタログには次が実装されています。

プラットフォーム接続
TelegramBot APIロングポーリング
DiscordBot Gateway
SlackSocket Mode
WhatsAppBusiness Cloud API Webhook
FacebookMessenger Webhook
メールTLS経由のIMAP受信とSMTP送信
SMSTwilio WebhookとREST
DingTalkStream接続
Feishu / Lark既定は長時間接続。既存Webhookアカウントは更新可能
Weixin / WeChatQR確認付きロングポーリング
QQ BotWebSocket Gateway
IRCTLSとSASL
LINEMessaging API Webhook

インストールしたバージョンの正式なカタログは設定ウィザードです。ウィザードで未対応と表示される項目は、推測した設定を追加するだけでは有効にできません。

簡単な設定​

選択したProfileの常駐Gatewayを起動し、対話型チャンネルウィザードを開きます。

anyy gateway start
anyy setup channel

ウィザードは実行中のGatewayカタログを読み取ります。プラットフォームを選び、CLIのポリシー選択を含む、実際に提供される入力欄を埋め、書き込み前に概要を確認します。未設定のプラットフォームには既定の接続プロファイルを使用し、汎用的なプロファイル切り替え機能はありません。現在の設定画面は、そのプラットフォームにアカウントがない場合だけ新規作成し、既存アカウントがある場合は更新します。

非対話型ターミナルでは、プラットフォームを付けずに実行するとカタログを表示します。プラットフォーム名を付けると非対話型設定が選ばれます。anyy setup channel telegramはTelegram専用ウィザードを開きません。設定とメッセージ送受信のどちらにも常駐Gatewayを利用可能にしておいてください。

先にローカルチャットを検証する

Channelを追加する前に、DashboardまたはTUIでメインモデルを設定してテストします。モデル/プロバイダーの問題とメッセージング接続の問題を切り分けられます。

Dashboardでの設定​

Dashboard → Channelを開くと、保存済みアカウントと利用可能なプラットフォームの種類を確認できます。「Configured」はこのProfileに保存済みという意味で、接続中とは限りません。ここでは次ができます。

  • アカウントの追加。
  • プラットフォームの既定設定項目の使用。
  • シークレット以外のフィールドと認証情報の入力。
  • そのアカウントのDashboardアクションに公開されたフィールドの編集。
  • アカウント詳細と健全性の確認。
  • Channelの再読み込み。
  • 接続の削除。

Weixin / WeChatではDashboardにQRログインと紐付け済みアカウントの送信者アクセスフォームがあります。他のプラットフォームのDashboard/TUI認証情報フォームには、CLIのDM/グループポリシー入力はありません。これらを変えるには対話型ターミナルでanyy setup channelを使います。カタログに宣言されたアクションが、特定の画面では提供されない場合があります。Feishuの切り替えはその一例です。

アクセスとペアリング​

チャンネルプロファイルは、公開アクセス、ペアリング、許可リスト、メンション限定のグループアクセス、受信無効などのポリシーを提供できます。利用可能な選択肢はプラットフォームの契約によって異なります。

現在、送信者リストを入力できるのは、紐付け済みWeixinのアクセスフォームとIRCのCLIウィザードです。他の送信者/グループリストも既存のものは使用できますが、現在の設定アクションでは項目を編集できません。allowlistを選んでもリストは作られず、空または一致しないリストでは送信者が拒否されます。追加の--setキーを推測したり、state.dbを編集したりしないでください。

ペアリング要求はCLIで管理できます。現在のDashboardのChannelページにはペアリング承認の一覧はありません。保留中の要求を表示します。

anyy channel pairing list

要求IDで承認または拒否します。

anyy channel pairing approve --request REQUEST_ID
anyy channel pairing reject --request REQUEST_ID

対話的に入力したコードで送信者のペアリング要求を承認します。

anyy channel pairing approve --prompt-code \
--channel telegram --account personal

既存の許可を取り消します。

anyy channel pairing revoke --grant GRANT_ID --reason "access removed"
ペアリングはアシスタントへのアクセスを許可します

承認前に、人物/アカウントとプラットフォームを確認してください。許可により、そのChannelのポリシーに従って会話へのアクセスと有効なアシスタント機能が公開される可能性があります。

会話の範囲​

Anyyは、現在のアカウント、相手、スレッドルートが同じ場合、紐付いたSessionを再利用します。共有ルームでは会話コンテキストを共有します。プラットフォームの返信コンテキストは異なります。SlackとDiscordはスレッドを保持しますが、現在のWhatsAppとEmailのルートには受信メッセージ識別子も使います。そのため、同じ連絡先からのメッセージが常に1つのAnyy Sessionを共有するとは限りません。

/newは現在のルートに新しいSessionを作り、/stopはその実行中の処理を中断します。コマンド返信に失敗しても、確定したローカル操作は取り消されません。アカウントの再作成や識別情報の変更によって、置換した接続に過去の返信を再送する権限が与えられることはありません。

健全性と再読み込み​

1つのプラットフォームを確認します。

anyy channel doctor telegram

実行中のGatewayでチャンネル設定を再読み込みします。

anyy channel reload

他のプログラムで構造化出力が必要な場合は、対応するdoctor、pairing-list、reloadコマンドに--jsonを追加します。ローカル操作の受領記録、アダプターの機能宣言、観測されたメッセージ配信は別々の事実です。出荷されたカタログは実行可能なプロファイルをPreviewと表示することがあります。実際のアカウントで、必要な各機能をテストしてください。

プラットフォームによる受理は、受信者が読んだことを意味しません。確認応答のない送信はsent_unconfirmedのままになる場合があります。新しい最終返信が再試行されるのは、外部への作用前で安全な失敗と判明している場合だけです。一部送信済みまたは成否不明の送信は、全体を自動再送しません。別のコピーを依頼する前に会話を確認してください。再読み込みは過去の履歴を再送せず、現在のアカウントを調整します。

非対話型の設定​

自動化では、チャンネルアクション契約を使って1つのプラットフォームを設定できます。

anyy setup channel CHANNEL \
[--set INPUT=VALUE] \
[--sensitive-fd INPUT=FD] \
[--external-locator-fd INPUT=FD]

たとえば設定済みTelegramアカウントのポリシーは、anyy setup channel telegram --set dm_policy=pairing --set group_policy=mentionで更新できます。新規作成には宣言された認証情報も必要です。

シークレット以外の入力には--setを使います。認証情報には3以上の専用の開いたファイル記述子を--sensitive-fdで渡し、値がプロセス引数やシェル履歴に出ないようにします。選択した入力が対応している場合、--external-locator-fdは外部管理されたシークレットの場所を指定します。

正確な入力IDは選択したプラットフォーム/プロファイルで定義され、その設定フローに表示されます。他のChannelからフィールド名を推測しないでください。

Webhookプラットフォーム​

WhatsApp、Facebook、SMS、LINE、FeishuのWebhookプロファイルには、受信Webhook配信が必要です。設定契約ではプラットフォーム固有のコールバックフィールドと検証認証情報を要求します。

共通Webhookリスナーは既定で無効です。選択したProfileのconfig.yamlで有効にします。

channel_webhooks:
enabled: true
listen: 127.0.0.1:8770

この起動設定を変えた後はGatewayを再起動します。anyy channel reloadだけでは無効だったリスナーは起動しません。プラットフォームの正確な/channels/PLATFORM/ACCOUNT_ID/webhookパスをHTTPSからこのリスナーへ転送します。Dashboardポートへは転送しません。本文と署名ヘッダーを維持し、検証シークレットを非公開に保ち、プラットフォームの購読/権限を設定します。Twilioは元の公開URLも検証します。

トラブルシューティング​

問題対処
アカウントを保存できるが受信しないanyy gateway statusとanyy channel doctor CHANNELを実行
ロングポーリング/WebSocket Channelが切断される認証情報とネットワーク接続を修正し、anyy channel reloadを実行
Webhook検証に失敗する公開HTTPSルーティング、コールバックURL、署名シークレット、プラットフォームの購読を確認
ダイレクトメッセージが無視されるDMポリシー、ペアリング状態、許可リストを確認
グループメッセージが無視されるグループポリシーとメンションが必要かを確認
別人をペアリングした直ちに許可を取り消し、保留中/有効なアクセスを確認