Salesforceの変更をChatworkのチャットへ知らせる
商談のフェーズが変わったときに、Chatworkの決まったチャットへ知らせを流せます。2023年に書いた記事を、2026年9月時点のChatwork APIとSalesforceの公式ドキュメントで確かめ直し、作り方まで書き足しました。
どういうときに使うのか
Chatworkは、Chatwork株式会社が提供するビジネスチャットです。社内の連絡をChatworkに寄せている会社では、Salesforceの変化をChatworkで知りたい、という声がよく出ます。
たとえば次のような使い方です。
- 商談のフェーズが「受注」に変わったら、営業チームのチャットへ知らせる
- 大きな金額の商談が作られたら、上長のいるチャットへ知らせる
- ケースの優先度が上がったら、サポートのチャットへ知らせる
当時の記事では、商談のフェーズを変えるとChatworkのチャットに通知が届く画面と、枠で囲んだ「インフォメーション」の形で届く画面を紹介していました。
仕組みの全体像
ここでは、SalesforceからChatwork APIを直接呼ぶ形で作ります。この形なら、何を・いつ・どのチャットへ送るかを自社で決められます。
| 部品 | 役割 |
|---|---|
| Chatwork APIのAPIトークン | Chatworkへ投稿する権限です。投稿する人のアカウントで発行します |
| 外部ログイン情報・指定ログイン情報 | APIトークンをSalesforceの中に暗号化して持ち、要求のヘッダーへ付けます |
| 呼び出し可能なApex | Chatwork APIへメッセージを投稿します |
| レコードトリガーフロー | 商談のフェーズが変わったときに、上のApexを呼びます |
Chatwork APIで使うのは「チャットにメッセージを投稿する」(POST /rooms/{room_id}/messages)です。ベースURIは https://api.chatwork.com/v2 で、APIトークンは要求のヘッダーに x-chatworktoken というキーで付けます。
作り方
Chatwork APIの利用を始める
Chatworkの画面右上の利用者名から「サービス連携」を開き、「APIトークン」を選びます。パーソナルプラン以外では、組織管理者への利用申請が要ります。
外部ログイン情報を作る
Salesforceの設定で外部ログイン情報を作り、認証プロトコルを「カスタム」にします。プリンシパルに認証パラメータを1つ足し、APIトークンを入れます。プリンシパルは、使う人の権限セットかプロファイルにひもづけます。
カスタムヘッダーを足す
外部ログイン情報に、名前が
x-chatworktoken、値が{!$Credential.ChatworkAuth.ApiToken}のカスタムヘッダーを足します。ChatworkAuthは外部ログイン情報の名前、ApiTokenは認証パラメータの名前です。指定ログイン情報を作る
名前を
Chatwork、URLをhttps://api.chatwork.com/v2にし、上の外部ログイン情報を選びます。「認証ヘッダーを生成」はオフにします。Apexクラスを置く
下のクラスを置きます。フローから呼べるように
callout=trueを付けています。フローから呼ぶ
商談のレコードトリガーフローを作り、開始要素の「アクションと関連レコード」で非同期パスを足します。非同期パスの中でApexアクション「Chatworkに投稿」を置き、ルームIDと本文を渡します。
public with sharing class ChatworkNotifier { public class Request { @InvocableVariable(required=true label='ルームID') public String roomId; @InvocableVariable(required=true label='本文') public String message; } @InvocableMethod(label='Chatworkに投稿' callout=true) public static void post(List<Request> requests) { Http http = new Http(); for (Request r : requests) { HttpRequest req = new HttpRequest(); req.setEndpoint('callout:Chatwork/rooms/' + EncodingUtil.urlEncode(r.roomId, 'UTF-8') + '/messages'); req.setMethod('POST'); req.setHeader('Content-Type', 'application/x-www-form-urlencoded'); req.setBody('body=' + EncodingUtil.urlEncode(r.message, 'UTF-8')); HttpResponse res = http.send(req); if (res.getStatusCode() != 200) { System.debug(LoggingLevel.ERROR, 'Chatwork ' + res.getStatusCode() + ' ' + res.getBody()); } } } }
Chatworkのチャットへメッセージを投稿する呼び出し可能なApex
APIトークンはコードにもフローにも書きません。指定ログイン情報を通すことで、トークンは暗号化されたまま要求のヘッダーに付きます。
枠で囲んだ形で知らせる
当時の記事で見せていた「インフォメーション」の形は、Chatworkのメッセージ記法で作れます。本文を [info][title]見出し[/title]本文[/info] で囲むと、枠線とタイトルの付いたメッセージになります。
たとえば、フローの数式で本文を次のように組み立てます。
[info][title]商談のフェーズが変わりました[/title]商談名:{!$Record.Name}
フェーズ:{!$Record.StageName}[/info]フローで組み立てる本文の例
| 気をつけること | 理由 |
|---|---|
| 同じチャットへの投稿回数 | Chatwork APIには、チャットごとに10秒あたり10回までという投稿の制限があります。一括更新でたくさん動くと、429のエラーになります |
| APIトークンの持ち主 | 投稿はトークンを発行した人の名前で出ます。個人ではなく、通知用のアカウントで発行するほうが運用しやすくなります |
| トークンの扱い | Chatworkのドキュメントでは、APIトークンに有効期限がなく、すべての機能を使えると書かれています。URLのクエリに載せず、必ずヘッダーで送ります |
当時の記事から変わったこと
2023年の記事には、商談のフェーズを変える画面、Chatworkに通知が届いた画面、インフォメーションの形で届いた画面の3枚を載せていました。この3枚の画像は、いまは残っていません。同じ内容を、上の手順と記法の例で文章に書き起こしています。
当時の記事にあったChatworkの料金は、改定で変わっている可能性があるため外しました。
確認した環境
- 2026年9月時点のChatwork APIのドキュメント(エンドポイント、メッセージの投稿、メッセージ記法、利用開始の方法)で確認しています
- Salesforce側は、2026年9月時点の公式ヘルプ(指定ログイン情報のカスタムヘッダー、レコードトリガーフローの考慮事項)とApex開発者ガイド(InvocableMethod)で確認しています
まとめ
- SalesforceからChatwork APIを直接呼ぶ形なら、送る中身と宛先を自社で決められます
- APIトークンは外部ログイン情報に入れ、カスタムヘッダー
x-chatworktokenで送ります - 投稿は
POST /rooms/{room_id}/messagesを、callout=trueの呼び出し可能なApexから呼びます - フローからは非同期パスで呼び、ISCHANGED の代わりに開始要素の条件で絞り込みます
[info][title]…[/title]…[/info]で囲むと、枠とタイトルの付いた通知になります
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。