📊 まとめビューア

chatwork_batch_tool_design.xlsx

シート数: 10

○○Chatwork一括送信ツール開発 2025年4月(株)インデックス
■実現したいこと
・処遇改善加算システムから発行したPDFファイルを顧客にChatworkで送付したい。
・現在は手動で手間がかかるため、顧客から要望をいただいたタイミングで送付しているが定期的に送る運用としたい(月次、年次など)。
・上記以外にも不定期なメッセージ送信やファイル送信を汎用的に行える仕組みが欲しい。
■ご提案
・Chatwork(ChatworkAPI)を利用したメッセージ一括送信ツールをご提案いたします。
・次シート以降に各画面の機能を記載しています。
※各画面のレイアウト、および機能詳細は開発中にお客様と相談のうえ変更となる可能性があります。
■システム図 ※赤枠で囲われた画面は、その赤枠単位で一画面として作成する。赤枠の無いものは一つ一つが一画面。
メイン画面
【Chatworkメッセージ送信ツール】 - ×
①定期送信 ・・・ 定期送信画面を表示します。
・月次、年次など、定期的に送信する業務に使用する。
・あらかじめマスタとして送信パターンを登録しておく(定型文、送信対象顧客)
※添付ファイルは顧客ごとに異なります。
②不定期送信 ・・・ 不定期送信画面を表示します。
・単発のお知らせなどを不定期に送信する場合に使用する。
添付ファイルは単一(共通)です(添付なしも可)。
③設定 ・・・ 設定メニューを表示します。
画面遷移時、このフォームは非表示にする。
定期送信画面
※青色文字……杉野が追記した内容。
【Chatworkメッセージ送信ツール】定期送信 作成 - ×
【パターン名称】
選択時、対応する以下の情報をパターンマスタから自動反映
「送信内容」「送信対象選択」
パターン名称 月次報告資料A ※「送信対象選択」には、(非表示以外の)顧客マスタデータを表示したうえで、
パターンマスタに設定された送信対象にのみチェックを付けた状態とする。
送信内容 送信対象
いつもお世話になっております。 2025年6月の月次報告資料をお送りいたします。 ご確認のほどお願い申し上げます。 自動選択 ※「添付ファイル保存場所」に存在するファイルを基準に自動で決定。 【送信対象】
🔘 手動選択 手動選択の場合のみ、下の枠内が活性化される。枠内で、顧客の絞り込みと送信対象選択が可能。
絞り込み 【絞り込みについて】
管理番号 ・「絞込」「絞込解除」ボタン押下→下のグリッドに反映。
顧客名 絞込 絞込解除 ・「管理番号」は前方一致。顧客名は部分一致。
送信対象選択 □全選択 ・グリッドのチェック情報は、表示されていない顧客の情報も内部的に管理する。
管理番号 顧客名 送信対象 【グリッドについて】
1111 顧客A ・管理番号の昇順で表示
1112 顧客B ・「全選択」のチェックOn/Offで、今表示されている顧客のみを対象とし、On/Offを切り替える。
1113 顧客C
1114 顧客D 【添付ファイル保存場所】
…… 一括送信を行う際に添付するファイルが置かれた場所(親フォルダのパス)を指定する。
フォルダ構成は以下のような形を想定。
なおフォルダ構造は以下のような形を想定してます。
20250620_月次報告資料A 会社名など_管理番号.pdf
……
会社名など_管理番号.pdf
……
20250720_月次報告資料A 会社名など_管理番号.pdf
添付ファイル保存場所 ……
\\server\月次報告資料A 会社名など_管理番号.pdf
※一回の定期送信処理で送りたいファイルを、一つのフォルダの中に入れておくイメージ。
エラーメッセージ
・[管理番号]1111 [顧客名]テスト顧客1 添付PDFファイルが「\\server\月次報告資料A」に見つかりませんでした。 ・[管理番号]1112 [顧客名]テスト顧客2 指定のルームID「1234567」に宛先アカウントID「9876543」が見つかりませんでした。 ・[管理番号]1114 [顧客名]テスト顧客4 添付PDFファイルが「\\server\月次報告資料A」に複数見つかりました。 …… 【テスト送信】
ボタン押下で自分自身(送信用アカウント)に「送信内容」を送信する。
添付なし(または固定のファイルとする想定)。画面遷移なし。送信完了したらそれを通知するメッセージボックスのみ表示。
【送信確認】
①ボタン押下時以下のチェック処理を行う。
・送信対象の顧客と添付ファイル保存場所のファイルの突合。
フォーマット「~管理番号.pdf」として突合する。
突合した結果ファイルが見つかればOK。(複数見つかる場合エラー扱い)
※処遇改善システムから出力する時にそのようなフォーマットになるようにする予定。
・送信対象の顧客情報がChatworkに存在するかチェック
・指定ルームIDが存在するか。
・指定ルームIDに、指定宛先IDが存在するか。
②何かしらエラーがあれば「エラーメッセージ」テキスト欄に内容を表示。
※同一画面に表示することで、ユーザーの確認負担を軽減。
③エラーがなければ「確認画面」に遷移。
・・・・・ 「送信確認」ボタン押下時、下記の通りの動作となります。
【送信対象選択:自動】の場合
「添付ファイル保存場所」のファイルを基準として送信対象を決定します。
添付ファイル保存場所
■送信対象
No 1111:顧客A
1112:顧客B
Yes
【送信対象選択:手動】の場合
「送信対象選択」でチェックを入れた顧客を送信対象とします。
管理番号 顧客名 送信対象
1111 顧客A ■送信対象
1112 顧客B 1111:顧客A
1113 顧客C
1114 顧客D
添付ファイル保存場所
ファイル
【Chatworkメッセージ送信ツール】定期送信 確認 - ×
以下の内容でChatworkへの送信を行います。
顧客と添付ファイルの対応が問題ないか確認のうえ、「送信開始」ボタンを押してください。 【送信対象およびファイルパス】
・任意の行を選択した場合
送信対象およびファイルパス →対応する送信内容を「実際の送信内容」欄に表示。
管理番号 顧客名 ファイルパス ・「ファイルパス」列の文字列をダブルクリックした場合
1111 顧客A \\server\月次報告資料A\顧客A_1111.pdf →該当ファイルを表示します(PDFファイルの想定)。
4444 顧客D \\server\月次報告資料A\顧客D_4444.pdf
【実際の送信内容】
実際にChatworkで送られることになるメッセージを表示する。
※基本的に前画面と同じ内容だが、以下のみ動的に追加・変更される。
①宛先の自動挿入
・「顧客マスタ」の「宛先アカウントID」が設定されている場合
→「実際の送信内容」の先頭に、以下のような宛名を自動で付与します。
例:顧客マスタの宛先アカウントID=123456の場合
■「実際の送信内容」欄
[To:123456][pname:123456]さん
※なおChatwork上では以下のように、
対応するユーザーアイコン・ユーザー名に自動変換されて表示されます。
・「顧客マスタ」の「宛先アカウントID」が設定されていない場合
→宛名の自動付与なし。(原文のまま)
実際の送信内容 ②特定文字列の変換
[To:123456][pname:123456]さん いつもお世話になっております。 2025年6月の月次報告資料をお送りいたします。 ご確認のほどお願い申し上げます。 以下の文字列のみ変換する。
変換前 変換後 フォーマット 変換後表示例
<DATE> その時の年月日 yyyy/m/d 2025/6/27
【送信開始】
ボタン押下で確認メッセージボックス表示。
メッセージボックスでもOK押下されたら一件ずつチャットワークメッセージ(+添付ファイル)の送信処理を行う。
※送信処理中
送信完了まで画面遷移など不可とする。(ボタンなど非活性化する)
Chatworkメッセージ送信中です。 送信処理の進捗はボタン右にリアルタイムで表示。
完了までしばらくお待ちください。(〇件 / 〇〇〇件)
【Chatworkメッセージ送信ツール】定期送信 送信結果 - ×
送信処理が完了しました。 【送信結果画面への切り替え】
送信処理が完了したら「定期送信 送信結果」画面へ切り替える。
成功件数 12件 送信日時 2025/04/01 9;00:00
失敗件数 2件 パターン名称 月次報告資料A 【送信結果ヘッダ】
送信処理の成功/失敗件数、送信日時、パターン名称を表示。
送信結果 送信結果(エラーのみ) 送信前の入力情報
【送信結果明細】
送信対象およびファイルパス タブで3種類の情報を確認できる。
管理番号 顧客名 ファイルパス 「送信前の入力情報」 「定期送信 送信確認」画面で表示されていた情報を表示する。
1111 顧客A \\server\月次報告資料A\顧客A_1111.pdf 「送信結果」 送信処理の結果をすべて表示。
4444 顧客D \\server\月次報告資料A\顧客D_4444.pdf 「送信結果(エラーのみ)」 送信処理の結果のうち、エラー情報のみ表示。
※「送信結果」に表示される情報は、送信履歴データ(つまりログ)として記録する。
ログは「設定」→「送信履歴管理」画面で確認可能。
実際の送信内容
[To:123456][pname:123456]さん いつもお世話になっております。 2025年6月の月次報告資料をお送りいたします。 ご確認のほどお願い申し上げます。
添付ファイル保存場所
\\server\月次報告資料A
↓「送信結果(エラーのみ)」タブを選択した場合の表示イメージ
送信結果 送信結果(エラーのみ) 送信前の入力情報
・[管理番号]1111 [顧客名]テスト顧客1 <ここにエラー内容を表示> …… 「送信結果」「送信結果(エラーのみ)」のログ情報はテキストボックスに出力する。
※ドラッグアンドドロップできるようにするため。
不定期送信画面
【Chatworkメッセージ送信ツール】不定期送信 作成 - ×
基本的に「定期送信画面」と同じ。
送信内容 送信対象 以下、「定期送信画面」と違う部分のみ記載。
いつもお世話になっております。 下記の期間が年末年始休暇となります。 ・〇/△~〇/△ 絞り込み
管理番号
顧客名 絞込 絞込解除 ・「送信対象選択」にはマスタにある全顧客を表示。
送信対象選択 □全選択
管理番号 顧客名 送信対象
1111 顧客A
1112 顧客B
1113 顧客C
1114 顧客D
……
添付ファイル
なし
🔘 あり 添付ファイルパス \\server\お知らせ\長期休暇のお知らせ.pdf
エラーメッセージ
・[管理番号]1111 [顧客名]テスト顧客1 添付ファイル「'\\server\お知らせ\長期休暇のお知らせ.pdf」が見つかりませんでした。 ・[管理番号]1112 [顧客名]テスト顧客2 指定のルームID「1234567」に宛先アカウントID「9876543」が見つかりませんでした。 ……
以降、「定期送信画面」と同様。
設定画面
【Chatworkメッセージ送信ツール】 - ×
①送信者情報マスタ
送信時に使用する情報を管理(ChatworkAPIトークンなど)
②顧客マスタ
本システムを用いてChatworkメッセージを送信し得る顧客情報を管理。
③送信パターンマスタ
送信する内容ごとのテンプレートを管理。
④送信履歴
すべての送信履歴を管理。
①~④押下時、このフォームは非表示にする。
【Chatworkメッセージ送信ツール】送信者情報マスタ - ×
APIトークン ※事前にChatwork側での発行が必要です テスト送信先ルームID(rid)
※Chatwork送信用アカウントを変更する場合、以下の手順が必要となります。
1.Chatwork側でAPIトークン(英数字の文字列)の発行
※以下はメモ用にお使いください(ツール上では使用されません) 2.発行したAPIトークンを左記画面に入力して「更新」
Chatwork送信用アカウント名
バリデート処理
項目名 必須 その他チェック
APIトークン 文字数チェック
ルームID 文字数チェック
アカウント名 文字数チェック
【Chatworkメッセージ送信ツール】顧客マスタ - ×
検索条件について
管理番号 前方一致
管理番号 顧客名 顧客名 部分一致
表示順
並び順の昇順。
※グリッドのヘッダ部分ダブルクリックで自由に並び替え可能。他の画面でも同様。
管理番号 顧客名 ルームID(rid) 宛先アカウントID 並び順 未使用 編集 補足
1111 顧客A 111111 1234567 10 ✏️ ■ルームID確認方法
1112 顧客B 222222 2345678 20 ✏️ ・各グループチャットを開いた状態のURL末尾
1113 顧客C 333333 3456789 30 ✏️
1114 顧客D 444444 4567890 40 ✏️
■宛先アカウントID確認方法
・目的の相手に「TO」を付与する際のメッセージ本文
「送信パターンマスタ」のように、個別編集画面に遷移。
個別編集画面でのバリデート処理
項目名 必須 その他チェック
管理番号 int型チェック。文字数チェック
顧客名 文字数チェック。
ルームID 正の整数のみ。文字数チェック
宛先アカウントID 正の整数のみ。文字数チェック
並び順 int型チェック。
未使用フラグ
【Chatworkメッセージ送信ツール】送信パターンマスタ - ×
表示順
パターン名称 並び順の昇順。
管理番号 顧客名
検索条件について
パターン名称 部分一致
管理番号 前方一致※パターンに含まれる複数管理番号のうち、一つでも一致したら対象
パターン名称 定型文 並び順 未使用 編集 顧客名 部分一致※パターンに含まれる複数顧客名のうち、一つでも一致したら対象
月次報告資料A いつもお世話になっております。〇〇〇の月次報告資料をお送りいたします。ご確認の… 10 ✏️
月次報告資料B いつもお世話になっております。△△△の月次報告資料をお送りいたします。ご確認の… 20 ✏️
月次報告資料C いつもお世話になっております。XXXの月次報告資料をお送りいたします。ご確認の… 30 ✏️
月次報告資料D いつもお世話になっております。□□□の月次報告資料をお送りいたします。ご確認の… 40 ✏️
【Chatworkメッセージ送信ツール】送信パターンマスタ 個別編集 - ×
パターン名称 月次報告資料A 並び順 10 未使用フラグ ・「定期送信 作成」画面のデザインと同じ。
※開発する上でもこの共通部分を部品化して実装したい
送信内容(定型文)
いつもお世話になっております。 XXXの月次報告資料をお送りいたします。 ご確認のほどお願い申し上げます。
・Chatwork標準のタグに加え、特殊な記号を使用可能とする。
{DATE}:送信時の日付(2025/04/01 形式)を挿入
↑必要? 他にも必要? ※左の文章に合った情報が必要だとしたら年月のみ(例:2025年4月)の方がよさそう。
仕様確認中
※ChatworkでToボタンを押したときに生成される以下のような情報は、ここでは記載不要。
送信対象 顧客マスタに宛先アカウントIDが設定されていれば、定型文の先頭に自動で挿入される。
自動選択 ※「添付ファイル保存場所」に存在するファイルを基準に自動で決定。
🔘 手動選択
絞り込み
管理番号 バリデート処理
顧客名 絞込 絞込解除 項目名 必須 その他チェック
送信対象選択 □全選択 パターン名 文字数チェック。重複不可。
管理番号 顧客名 送信対象 送信内容 なし
1111 顧客A 送信対象 ※自動選択or手動選択のどちらかを必ず選択
1112 顧客B 送信対象一覧
1113 顧客C 並び順 int型チェック。
1114 顧客D 未使用フラグ
……
2025/7/11 追記
ユーザーコントロール「SendContentControl.cs」を使用
・画面右下のボタンの文字は、新規作成の場合「登録」、更新の場合「更新」と表示する。ほかのマスタ画面も同様。
【Chatworkメッセージ送信ツール】送信履歴管理 - ×
🔘 定期送信 ○不定期送信
送信日付 📅 📅
パターン名称
管理番号 顧客名
送信日時 パターン名称 送信結果 詳細
2025/04/01 9;00:00 月次報告資料A 成功 【?】 ・「詳細」列の【?】ボタン押下→送信履歴管理(詳細)画面へ遷移
2025/03/01 9;00:00 月次報告資料A エラーあり 【?】
2025/02/01 9;00:00 月次報告資料A 成功 【?】
2025/01/01 9;00:00 月次報告資料A 成功 【?】
【Chatworkメッセージ送信ツール】送信履歴管理 詳細 - ×
基本的に「定期送信 送信結果」画面をそのまま表示する。
ただし一行目の「送信処理が完了しました。」はクリア。
成功件数 12件 送信日時 2025/04/01 9;00:00
失敗件数 2件 パターン名称 月次報告資料A 2025/7/11 追記
ユーザーコントロール「MessageSendResultControl.cs」を使用
送信結果 送信結果(エラーのみ) 送信前の入力情報
送信対象およびファイルパス
管理番号 顧客名 ファイルパス
1111 顧客A \\server\月次報告資料A\顧客A_1111.pdf
4444 顧客D \\server\月次報告資料A\顧客D_4444.pdf
実際の送信内容
[To:123456][pname:123456]さん いつもお世話になっております。 2025年6月の月次報告資料をお送りいたします。 ご確認のほどお願い申し上げます。
添付ファイル保存場所
\\server\月次報告資料A
ファイル送信方法について
※優位と判断した方をオレンジとしています
A案 B案
Googleドライブにファイルをアップロードし、 ファイルのリンク(URL)をChatworkで送信 Chatworkでファイルを直接送信
顧客の手間 △ ・Googleアカウントが必要(メールアドレスを指定して公開) ・リンクをクリックしてGoogleドライブを開き、そこからダウンロードする必要あり ※Googleアカウントを必要としない設定でファイルを共有することも可能ですが、 URLを知っていれば誰でもアクセス可能となります。 〇 ・添付されたファイル名をクリックするのみでダウンロード可能
開発コスト(費用)
一度にアップロード可能な ファイルサイズ 〇(256MB) △(5MB)
ファイル管理 〇(バージョン管理・差し替え可) △(一度送ると修正不可)
セキュリティ 〇(※メールアドレスを指定して公開する場合) △(Chatwork側に依存)
ファイル保存期間 〇(無期限 ※Googleの仕様による) △(無制限だが、フリープランの場合40日以前のメッセージは閲覧不可)
処理速度 △(Google+Chatwork操作が必要なためやや遅い) 〇(Chatwork操作のみのため速い)
https://mermaid.live/
flowchart TB
subgraph nwd[フォルダ]
Excel1@{ shape: paper-tape, label: "Excel"}
end
subgraph tool[ツール]
toolMenu[メインメニュー]
toolMakeMessages1[定期送信 作成]
toolMakeMessages2[不定期送信 作成]
toolConfirm1[定期送信 確認]
toolConfirm2[不定期送信 確認]
toolSendProcess((送信処理))
toolSend[送信結果]
toolMenu --> toolMakeMessages1
toolMenu --> toolMakeMessages2
toolMakeMessages1 --> toolConfirm1 --> toolSendProcess
toolMakeMessages2 --> toolConfirm2 --> toolSendProcess
toolSendProcess --> toolSend
toolSettings[設定]
toolSettingsSender[送信者情報マスタ]
toolSettingsCustomer[顧客マスタ]
toolSettingsCustomer2[顧客マスタ 個別編集]
toolSettingsSendPattern1[送信パターンマスタ]
toolSettingsSendPattern2[送信パターンマスタ 個別編集]
toolSettingsHistory[送信履歴管理]
toolSettingsHistory2[送信履歴管理 詳細]
toolMenu --> toolSettings
toolSettings --> toolSettingsSender
toolSettings --> toolSettingsCustomer --> toolSettingsCustomer2
toolSettings --> toolSettingsSendPattern1
toolSettingsSendPattern1 --> toolSettingsSendPattern2
toolSettings --> toolSettingsHistory --> toolSettingsHistory2
end
tool <-->|各画面で使用| DB[(データベース)]
nwd --> toolSendProcess
%% スタイル調整
classDef system fill:#ccccee,stroke:#55e,stroke-width:2px
classDef portal fill:#ccccee,stroke:#55e,stroke-width:2px
classDef database fill:#cccccc,stroke:#999999,stroke-width:2px
class seikyuSystem,EsSystem system
class DB database
IDE VisualStudio2019
プロジェクト Windows フォームアプリケーション(.NET Framework)
言語 C#
.NETバージョン 4.7.2
データベース関連
DB SqlServer 2019
DBMS SSMS18
A5SQL
データベース名 ENJI_CW
ポート番号 54321
認証方式 SQL Server認証
ユーザーID enji_user SQL Server認証で使用するアカウント
パスワード YenGp@ssW0rd1001 SQL Server認証で使用するアカウント
DB構築方法
以下と基本的に同じ(データベース名変える必要あり)
\\srvindex-v3\03_受注請負\999999_○○ー\処遇改善加算管理業務システム化\設計\02_環境構築
DB環境構築手順.xlsx
Sqlserver,SSMSがPCにインストールされてない場合
以下にインストーラーがあるのでインストールする
\\srvindex-v3\03_受注請負\999999_○○ー\処遇改善加算管理業務システム化\設計\02_環境構築
開発メモ
●chatgpt質問&回答
Chatwork api 指定のアカウントID(数字のみのやつ)が指定ルーム内に存在するか確認する方法はありますか?
はい、Chatwork API v2 には
「そのルームに誰が入っているか」を取得できる公式エンドポイントが用意されています。
ここで返される配列に、調べたい account_id(数値) が含まれているか確認するだけで判定できます。
使うエンドポイント
bash
コピーする編集する
GET https://api.chatwork.com/v2/rooms/{room_id}/members
X-ChatWorkToken ヘッダーに API トークンを付与
(ヘッダー名は X-ChatWorkToken / x-chatworktoken どちらでも可)
room_id は数値のルーム ID
返り値の例
js
コピーする編集する
{
"admin": [123, 542, 1001],
"member": [10, 103],
"readonly":[6, 11]
}
配列はいずれも account_id のみ で構成されます。
上記の例だと 123 は admin 権限で参加している、という意味です。download.chatwork.com
実装サンプル
cURL + jq(シェルスクリプト)
bash
コピーする編集する
TOKEN="XXXXXXXXXXXXXXXXXXXXXXXX"
ROOM_ID=999999
TARGET_ID=123
curl -s \
-H "X-ChatWorkToken: $TOKEN" \
"https://api.chatwork.com/v2/rooms/${ROOM_ID}/members" |
jq --arg ID "$TARGET_ID" '(.admin + .member + .readonly) | index(($ID|tonumber))' \
&& echo "✅ そのユーザーは在籍しています" \
|| echo "❌ そのユーザーはいません"
Python(requests)
python
コピーする編集する
import requests
API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXX"
ROOM_ID = 999999
TARGET_ID = 123
headers = {"X-ChatWorkToken": API_TOKEN}
url = f"https://api.chatwork.com/v2/rooms/{ROOM_ID}/members"
r = requests.get(url, headers=headers)
r.raise_for_status()
data = r.json()
all_ids = data["admin"] + data["member"] + data["readonly"]
exists = TARGET_ID in all_ids
print(exists) # True / False
注意点
項目 内容
必要なスコープ rooms.members:read(OAuth)/APIトークンなら不要
自分がそのルームのメンバーか Yes でないと 403 になります
レスポンス形式 上記 JSON のみ(2025-07-03 以降も変更なし)
これで「指定 ID がそのルーム内に存在するか」を高速に判定できます。
もし ユーザーの詳細情報(名前や部署など)も欲しい場合は、同エンドポイントが返す「詳細版」の JSON を利用するか、GET /contacts などと組み合わせてください。
情報源 https://download.chatwork.com/ChatWork_API_Documentation.pdf
パターン名称 条件
月次報告資料A から始まる
月次報告資料B を含む
月次報告資料C と一致する