Google Chat & Microsoft Teams チャネル
DuDuClawはGoogle ChatとMicrosoft Teamsを、Telegram/LINE/Discord/Slack/ WhatsApp/Feishu/WebChatと並ぶ一級チャネルとしてサポートしています。どち らもwebhookベースで、gatewayが公開HTTPS経由で到達可能である必要がありま す。
両チャネルとも以下を備えています。
- Markdown対応の返信:LLMが生成したmarkdownは各プラットフォームのネ
イティブ記法に変換されます(Google Chatは
*bold*/<url|text>リンク、 Teams markdownでは表が等幅ブロックにダウングレードされます)。 - 入力中インジケーター:Teamsは本物のタイピング中インジケーターを表 示します(3秒ごとに更新)。Google Chatにはタイピング表示用のAPIがないた め、DuDuClawはまずプレースホルダーメッセージ(「🤔 思考中…」)を送信し、 それをその場で編集して更新します。
- リアルタイム進捗:長時間かかるagentタスクの実行中は、ツールの活動
状況とagentのTODOタスクボード(
TodoWrite由来)がメッセージ編集を通じ てリアルタイムに表示され、最終的な返信が届くと削除されます。
Google Chat
Section titled “Google Chat”セットアップ
Section titled “セットアップ”- Google Cloudプロジェクトを作成(または既存のものを再利用)し、 Google Chat APIを有効化する。プロジェクト番号(project number、IAM & Admin → Settingsに表示)を控えておく。
- 同じプロジェクトにサービスアカウントを作成し、そのJSONキーをダウ
ンロードする。ドメイン全体委任(domain-wide delegation)は不要で、
Chat app自体がprincipal(scopeは
chat.bot)になる。 - Chat APIのConfiguration設定ページを開く。app名/アバター/説明
を設定し、Interactive featuresを有効化、Receive 1:1 messagesと
Join spaces and group conversationsにチェックを入れ、HTTP
endpoint URLを
https://<your-host>/webhook/googlechatに設定する。 - Authentication AudienceでProject numberを選択する。
- DuDuClawを設定する(
config.toml、またはダッシュボード → チャネル →googlechatを追加):
[channels]googlechat_project_number = "123456789012"# Paste the full service-account JSON (stored encrypted as *_enc)googlechat_service_account_json = '{ "type": "service_account", ... }'- gatewayを再起動する。ログに
✅ Google Chat webhook ready at /webhook/googlechatと表示されれば 成功。
- 受信リクエストは常にfail-closedで検証されます。
Authorization: BearerのJWTはchat@system.gserviceaccount.comが署名したものであ り、audienceは自分のプロジェクト番号と一致している必要があります。 - 返信は
spaces.messages.create経由で非同期に送信されます(同期ウィン ドウはわずか30秒しかなく、agentタスクには短すぎるため)。スレッドはREPLY_MESSAGE_FALLBACK_TO_NEW_THREADによって正しく紐づけられます。 - 未公開のChat appは自分のWorkspace組織内からしか見えません。より広い 配布範囲が必要な場合はGoogle Workspace Marketplaceへの公開が必要で す。
Microsoft Teams
Section titled “Microsoft Teams”Office 365 Connectors/incoming webhooksは2026年5月に廃止され、 現在サポートされている唯一の伝送経路は本物のAzure Botです。
セットアップ
Section titled “セットアップ”- Entra appの登録(Azure portal → App registrations → New registration、single tenantを選択)。Application(client)IDと Directory(tenant)IDを控え、client secretを作成する。
- Azure Botリソース(Create a resource → Azure Bot、無料のF0
プランで十分。Teamsのメッセージは常に無料)。既存のApp IDを使い、
Configuration → Messaging endpointを
https://<your-host>/webhook/teamsに設定し、Channels → Microsoft Teamsを有効化する。 - DuDuClawを設定する:
[channels]teams_app_id = "00000000-0000-0000-0000-000000000000"teams_app_password = "<client secret>" # stored encrypted as *_encteams_tenant_id = "<tenant id>" # empty = legacy multi-tenant bot- Teams appパッケージ:
manifest.json(schema ≥1.19、bots[].botIdは自分のApp ID、scopeはpersonal/team/groupChat)を含むzipを作成し、color.png(192×192)とoutline.png(32×32)を加える。Teams → Apps → Manage your apps → Upload a custom appからアップロード(組織のカスタムappポリシーが 必要)、または組織のカタログ経由で配布する。 - gatewayを再起動する。ログに
✅ Microsoft Teams webhook ready at /webhook/teamsと表示されれば 成功。
- 受信アクティビティは常にBot FrameworkのJWKS
(
login.botframework.com)に対してfail-closedで検証され、audienceは 自分のApp IDと一致し、トークンのserviceUrlクレームはそのアクティビ ティと一致している必要があります。single-tenant登録に対しては、Entra テナントスコープのフォールバック検証も用意されています。 - 受信メッセージのたびにconversation referenceが保存されます
(
~/.duduclaw/teams_conversations.json、上限500件)。これにより、 delegation callbackの転送やComputer Useのスクリーンショット/確認メッ セージのような能動的な送信が、後からその会話に届けられます。能動的な 送信が届くには、その会話が一度以上botにメッセージを送っている必要が あります。 - 返信には
textFormat: markdownが使われます。Teamsは通常のメッセージ 内で表や見出しをレンダリングしないため、DuDuClawは表を等幅コードブ ロックに、見出しを太字にダウングレードします。 - チャネル(channel)内では、botは自分に@メンションされたメッセージしか 受け取りません(Teamsプラットフォーム自体の仕様)。このメンションは agentに渡される前に取り除かれます。
フォーマット対応表(全チャネル)
Section titled “フォーマット対応表(全チャネル)”| チャネル | ネイティブ形式 | 表 | 入力中インジケーター |
|---|---|---|---|
| Telegram | HTML parse mode(<b>、<pre><code>、<blockquote>) |
等幅<pre> |
sendChatActionを4秒ごとに送信 |
| Discord | markdown + embeds | 等幅code fence | POST /typingを8秒ごとに送信 |
| Slack | ネイティブのmarkdownブロック(フォールバック時はmrkdwn) |
ネイティブ対応 | assistant.threads.setStatus |
| LINE | プレーンテキスト + Flex bubble | key-value形式のレコード | ローディングアニメーション(1:1、≤60秒) |
*bold*/~strike~/```` ```コードブロック |
等幅code fence | typing_indicator(≤25秒、受信時に発火) |
|
| Feishu | インタラクティブなCard 2.0 markdown | ネイティブ対応 | なし(メッセージで進捗を表示) |
| Google Chat | Chat markup(*bold*、<url|text>) |
等幅code fence | プレースホルダー + その場での編集 |
| MS Teams | markdownアクティビティ | 等幅code fence | typingアクティビティを3秒ごとに送信 |
| WebChat | 生のmarkdown(ダッシュボード側でレンダリング) | ネイティブ対応 | progress WSイベント |