"No","テストID","テスト種別","対象機能","テストケース名","前提条件","テスト手順","期待結果","優先度","備考"
"1","IT-001","API連携","Conversations API","会話一覧取得 - 認証済みユーザー","1. 有効なアカウントが存在すること 2. 認証済みエージェントがinbox memberであること","1. GET /api/v1/accounts/{account_id}/conversations を実行 2. 認証トークンをヘッダーに含める","1. HTTPステータス200を返す 2. メタ情報（all_count、mine_count等）を含む 3. 会話一覧をペイロードに含む","高","spec/controllers/api/v1/accounts/conversations_controller_spec.rb"
"2","IT-002","API連携","Conversations API","会話一覧取得 - 未認証ユーザー","1. 有効なアカウントが存在すること","1. GET /api/v1/accounts/{account_id}/conversations を実行 2. 認証トークンなしでリクエスト","HTTPステータス401（unauthorized）を返す","高","認証チェックの確認"
"3","IT-003","API連携","Conversations API","会話詳細取得 - 管理者権限","1. 有効な会話が存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/conversations/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. 会話の詳細情報を返す","高","権限チェック"
"4","IT-004","API連携","Conversations API","会話詳細取得 - アクセス権限なしエージェント","1. 有効な会話が存在すること 2. inbox memberでないエージェントが存在すること","1. GET /api/v1/accounts/{account_id}/conversations/{id} を実行 2. アクセス権限のないエージェントでリクエスト","HTTPステータス401（unauthorized）を返す","高","アクセス制御確認"
"5","IT-005","API連携","Conversations API","新規会話作成","1. 有効なcontact_inboxが存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations を実行 2. source_idパラメータを含める","1. HTTPステータス200を返す 2. 新規会話がDBに作成される 3. additional_attributesが正しく設定される","高","会話作成フロー"
"6","IT-006","API連携","Conversations API","会話ステータストグル","1. 有効な会話が存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/toggle_status を実行 2. statusパラメータを含める","1. HTTPステータス200を返す 2. 会話ステータスが更新される（open⇔resolved）","中","ステータス管理"
"7","IT-007","API連携","Conversations API","会話スヌーズ設定","1. 有効な会話が存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/toggle_status を実行 2. status=snoozedとsnoozed_untilを設定","1. HTTPステータス200を返す 2. 会話がスヌーズ状態になる 3. snoozed_untilが設定される","中","スヌーズ機能"
"8","IT-008","API連携","Conversations API","会話ミュート","1. 有効な会話が存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/mute を実行","1. HTTPステータス200を返す 2. 会話がresolved状態になる 3. 会話がmuted状態になる","中","ミュート機能"
"9","IT-009","API連携","Conversations API","会話削除 - 管理者権限","1. 有効な会話が存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/conversations/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. DeleteObjectJobがエンキューされる","中","削除機能"
"10","IT-010","API連携","Contacts API","連絡先一覧取得","1. 有効なアカウントが存在すること 2. 連絡先データが存在すること 3. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/contacts を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. 連絡先一覧をペイロードに含む 3. contact_inboxes情報を含む","高","連絡先管理"
"11","IT-011","API連携","Contacts API","連絡先検索","1. 検索対象の連絡先が存在すること","1. GET /api/v1/accounts/{account_id}/contacts/search を実行 2. クエリパラメータ（q）を指定","1. HTTPステータス200を返す 2. メールまたは名前でマッチした連絡先を返す 3. 大文字小文字を区別しない","高","検索機能"
"12","IT-012","API連携","Contacts API","連絡先フィルタリング","1. フィルタ条件に合う連絡先が存在すること","1. POST /api/v1/accounts/{account_id}/contacts/filter を実行 2. payloadにフィルタ条件を含める","1. HTTPステータス200を返す 2. フィルタ条件に合致する連絡先を返す","中","フィルタ機能"
"13","IT-013","API連携","Contacts API","連絡先作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/contacts を実行 2. name、custom_attributesパラメータを含める","1. HTTPステータス200を返す 2. 連絡先がDBに作成される 3. カスタム属性が正しく設定される","高","連絡先作成"
"14","IT-014","API連携","Contacts API","連絡先更新","1. 更新対象の連絡先が存在すること 2. 管理者ユーザーが存在すること","1. PATCH /api/v1/accounts/{account_id}/contacts/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. 連絡先情報が更新される 3. カスタム属性がマージされる","高","連絡先更新"
"15","IT-015","API連携","Contacts API","連絡先削除","1. 削除対象の連絡先が存在すること 2. 連絡先がオンラインでないこと 3. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/contacts/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. 連絡先がDBから削除される 3. 関連する会話、inbox、CSATレスポンスも削除される","高","連絡先削除"
"16","IT-016","API連携","Contacts API","連絡先インポート","1. 管理者ユーザーが存在すること 2. 有効なCSVファイルが準備されていること","1. POST /api/v1/accounts/{account_id}/contacts/import を実行 2. import_fileパラメータにCSVを添付","1. HTTPステータス200を返す 2. data_importが作成される 3. インポートファイルがアタッチされる","中","インポート機能"
"17","IT-017","API連携","Contacts API","連絡先エクスポート","1. 管理者ユーザーが存在すること 2. エクスポート対象の連絡先が存在すること","1. POST /api/v1/accounts/{account_id}/contacts/export を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. Account::ContactsExportJobがエンキューされる","中","エクスポート機能"
"18","IT-018","API連携","Inboxes API","受信ボックス一覧取得 - 管理者","1. 複数の受信ボックスが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/inboxes を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. すべての受信ボックスを返す","高","管理者権限確認"
"19","IT-019","API連携","Inboxes API","受信ボックス一覧取得 - エージェント","1. 複数の受信ボックスが存在すること 2. エージェントが一部のinboxのみmemberであること","1. GET /api/v1/accounts/{account_id}/inboxes を実行 2. エージェントの認証トークンを使用","1. HTTPステータス200を返す 2. 割り当てられた受信ボックスのみ返す","高","アクセス制御"
"20","IT-020","API連携","Inboxes API","Webウィジェット受信ボックス作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/inboxes を実行 2. channel.type=web_widgetを指定","1. HTTPステータス200を返す 2. Webウィジェットチャネルが作成される 3. website_urlが設定される","高","受信ボックス作成"
"21","IT-021","API連携","Inboxes API","Email受信ボックス作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/inboxes を実行 2. channel.type=emailとemailを指定","1. HTTPステータス200を返す 2. Emailチャネルが作成される","高","メール受信ボックス"
"22","IT-022","API連携","Inboxes API","API受信ボックス作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/inboxes を実行 2. channel.type=apiとwebhook_urlを指定","1. HTTPステータス200を返す 2. APIチャネルが作成される","高","API受信ボックス"
"23","IT-023","API連携","Inboxes API","受信ボックス更新","1. 更新対象の受信ボックスが存在すること 2. 管理者ユーザーが存在すること","1. PATCH /api/v1/accounts/{account_id}/inboxes/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. 受信ボックス情報が更新される 3. enable_auto_assignmentが更新される","高","受信ボックス更新"
"24","IT-024","API連携","Inboxes API","受信ボックス削除","1. 削除対象の受信ボックスが存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/inboxes/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. DeleteObjectJobがエンキューされる 3. 削除メッセージを返す","高","受信ボックス削除"
"25","IT-025","API連携","Inboxes API","エージェントボット設定","1. 受信ボックスが存在すること 2. エージェントボットが存在すること 3. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/inboxes/{id}/set_agent_bot を実行 2. agent_botパラメータを指定","1. HTTPステータス200を返す 2. エージェントボットが受信ボックスに関連付けられる","中","ボット連携"
"26","IT-026","API連携","Inboxes API","CSAT設定更新","1. 受信ボックスが存在すること 2. 管理者ユーザーが存在すること","1. PATCH /api/v1/accounts/{account_id}/inboxes/{id} を実行 2. csat_survey_enabledとcsat_configを含める","1. HTTPステータス200を返す 2. CSAT設定が保存される 3. display_type、message、survey_rulesが設定される","中","CSAT機能"
"27","IT-027","API連携","Agents API","エージェント一覧取得","1. 複数のエージェントが存在すること","1. GET /api/v1/accounts/{account_id}/agents を実行 2. 認証トークンを含める","1. HTTPステータス200を返す 2. アカウント内のすべてのエージェントを返す 3. custom_attributesを含む","高","エージェント管理"
"28","IT-028","API連携","Agents API","新規エージェント作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/agents を実行 2. name、email、roleパラメータを含める","1. HTTPステータス200を返す 2. 新規エージェントがDBに作成される 3. メールアドレスが正しく設定される","高","エージェント作成"
"29","IT-029","API連携","Agents API","エージェント一括作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/agents/bulk_create を実行 2. emailsパラメータに複数のメールアドレスを含める","1. HTTPステータス200を返す 2. 複数のエージェントが作成される 3. 既存のメールアドレスは無視される","中","一括登録機能"
"30","IT-030","API連携","Agents API","エージェント更新","1. 更新対象のエージェントが存在すること 2. 管理者ユーザーが存在すること","1. PUT /api/v1/accounts/{account_id}/agents/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. エージェント情報が更新される 3. role、availability、auto_offlineが更新可能","高","エージェント更新"
"31","IT-031","API連携","Agents API","エージェント削除","1. 削除対象のエージェントが存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/agents/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. エージェントがアカウントから削除される 3. 単一アカウントの場合はユーザーも削除","高","エージェント削除"
"32","IT-032","API連携","Teams API","チーム一覧取得","1. チームが存在すること","1. GET /api/v1/accounts/{account_id}/teams を実行 2. 認証トークンを含める","1. HTTPステータス200を返す 2. アカウント内のすべてのチームを返す","高","チーム管理"
"33","IT-033","API連携","Teams API","新規チーム作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/teams を実行 2. nameパラメータを含める","1. HTTPステータス200を返す 2. 新規チームがDBに作成される","高","チーム作成"
"34","IT-034","API連携","Teams API","チーム更新","1. 更新対象のチームが存在すること 2. 管理者ユーザーが存在すること","1. PUT /api/v1/accounts/{account_id}/teams/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. チーム名が更新される","中","チーム更新"
"35","IT-035","API連携","Teams API","チーム削除","1. 削除対象のチームが存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/teams/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. チームがDBから削除される","中","チーム削除"
"36","IT-036","API連携","Webhooks API","Webhook一覧取得","1. Webhookが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/webhooks を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. すべてのWebhookを返す","高","Webhook管理"
"37","IT-037","API連携","Webhooks API","Webhook作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/webhooks を実行 2. url、inbox_idパラメータを含める","1. HTTPステータス200を返す 2. 新規Webhookが作成される 3. 名前が設定可能","高","Webhook作成"
"38","IT-038","API連携","Webhooks API","Webhook作成 - 無効なURL","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/webhooks を実行 2. 無効なURL（javascript:alert(1)等）を指定","HTTPステータス422（unprocessable_entity）を返す","高","入力検証"
"39","IT-039","API連携","Webhooks API","Webhook更新","1. 更新対象のWebhookが存在すること 2. 管理者ユーザーが存在すること","1. PUT /api/v1/accounts/{account_id}/webhooks/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. Webhook情報が更新される","中","Webhook更新"
"40","IT-040","API連携","Webhooks API","Webhook削除","1. 削除対象のWebhookが存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/webhooks/{id} を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. WebhookがDBから削除される","高","Webhook削除"
"41","IT-041","API連携","Messages API","メッセージ作成","1. 有効な会話が存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/messages を実行 2. contentパラメータを含める","1. HTTPステータス200を返す 2. 新規メッセージが作成される 3. メッセージ内容が正しく設定される","高","メッセージ送信"
"42","IT-042","API連携","Messages API","添付ファイル付きメッセージ作成","1. 有効な会話が存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/messages を実行 2. content、attachmentsパラメータを含める","1. HTTPステータス200を返す 2. メッセージと添付ファイルが作成される 3. file_typeがimageと設定される","高","添付ファイル"
"43","IT-043","API連携","Messages API","メッセージ削除","1. 削除対象のメッセージが存在すること 2. エージェントがinbox memberであること","1. DELETE /api/v1/accounts/{account_id}/conversations/{id}/messages/{message_id} を実行","1. HTTPステータス200を返す 2. メッセージがdeleted状態になる 3. contentが'This message was deleted'に変更","中","メッセージ削除"
"44","IT-044","API連携","Messages API","失敗メッセージリトライ","1. 失敗ステータスのメッセージが存在すること 2. エージェントがinbox memberであること","1. POST /api/v1/accounts/{account_id}/conversations/{id}/messages/{message_id}/retry を実行","1. HTTPステータス200を返す 2. メッセージステータスがsentに変更される 3. external_errorがクリアされる","中","リトライ機能"
"45","IT-045","API連携","Campaigns API","キャンペーン一覧取得","1. キャンペーンが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/campaigns を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. すべてのキャンペーンを返す","高","キャンペーン管理"
"46","IT-046","API連携","Campaigns API","進行中キャンペーン作成","1. 受信ボックスが存在すること 2. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/campaigns を実行 2. inbox_id、title、message、trigger_rulesを含める","1. HTTPステータス200を返す 2. ongoing typeのキャンペーンが作成される 3. trigger_rulesが設定される","高","キャンペーン作成"
"47","IT-047","API連携","Campaigns API","ワンオフキャンペーン作成","1. Twilio SMSチャネルが存在すること 2. ラベルが存在すること 3. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/campaigns を実行 2. scheduled_at、audienceパラメータを含める","1. HTTPステータス200を返す 2. one_off typeのキャンペーンが作成される 3. scheduled_atとaudienceが設定される","中","ワンオフキャンペーン"
"48","IT-048","API連携","Campaigns API","キャンペーン更新","1. 更新対象のキャンペーンが存在すること 2. 管理者ユーザーが存在すること","1. PATCH /api/v1/accounts/{account_id}/campaigns/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. キャンペーン情報が更新される","中","キャンペーン更新"
"49","IT-049","API連携","Labels API","ラベル一覧取得","1. ラベルが存在すること","1. GET /api/v1/accounts/{account_id}/labels を実行 2. 認証トークンを含める","1. HTTPステータス200を返す 2. アカウント内のすべてのラベルを返す","高","ラベル管理"
"50","IT-050","API連携","Labels API","新規ラベル作成","1. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/labels を実行 2. titleパラメータを含める","1. HTTPステータス200を返す 2. 新規ラベルがDBに作成される","高","ラベル作成"
"51","IT-051","外部サービス連携","Slack連携","Slack Hook作成 - 認証済みユーザー","1. 有効なアカウントが存在すること 2. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/integrations/slack を実行 2. 認証コードを含める","1. HTTPステータス200を返す 2. Slack Hookが作成される 3. レスポンスにid='slack'を含む","高","spec/requests/api/v1/accounts/integrations/slack_request_spec.rb"
"52","IT-052","外部サービス連携","Slack連携","Slack Hook更新 - チャネルID","1. Slack Hookが存在すること 2. 管理者ユーザーが存在すること","1. PUT /api/v1/accounts/{account_id}/integrations/slack を実行 2. channelパラメータを含める","1. HTTPステータス200を返す 2. Hookが更新される 3. hooks配列にhook idを含む","中","チャネル設定"
"53","IT-053","外部サービス連携","Slack連携","Slackチャネル一覧取得","1. Slack Hookが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/integrations/slack/list_all_channels を実行","1. HTTPステータス200を返す 2. チャネル一覧を返す（id、name含む）","中","チャネル一覧"
"54","IT-054","外部サービス連携","Slack連携","Slack Hook削除","1. Slack Hookが存在すること 2. 管理者ユーザーが存在すること","1. DELETE /api/v1/accounts/{account_id}/integrations/slack を実行","1. HTTPステータス200を返す 2. HookがDBから削除される","中","Hook削除"
"55","IT-055","外部サービス連携","Integration Webhook","Webhook消費","1. Slack IncomingMessageBuilderが動作可能であること","1. POST /api/v1/integrations/webhooks を実行 2. パラメータを含める","1. HTTPステータス200を返す 2. IncomingMessageBuilder.performが呼ばれる","高","spec/requests/api/v1/integrations/webhooks_request_spec.rb"
"56","IT-056","外部サービス連携","Integration Hooks API","Integration Hook作成","1. Dialogflow用パラメータが準備されていること 2. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/integrations/hooks を実行 2. app_id、inbox_id、settingsを含める","1. HTTPステータス200を返す 2. Integration Hookが作成される 3. app_idが正しく設定される","高","Dialogflow連携"
"57","IT-057","外部サービス連携","Integration Hooks API","Integration Hook更新","1. 更新対象のHookが存在すること 2. 管理者ユーザーが存在すること","1. PATCH /api/v1/accounts/{account_id}/integrations/hooks/{id} を実行 2. 更新パラメータを含める","1. HTTPステータス200を返す 2. Hook情報が更新される","中","Hook更新"
"58","IT-058","外部サービス連携","Integration Hooks API","Integration Hookイベント処理","1. Hookが存在すること 2. エージェントユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/integrations/hooks/{id}/process_event を実行 2. event、payloadを含める","1. イベントが処理される 2. プロセッサが見つからない場合は422を返す","中","イベント処理"
"59","IT-059","外部サービス連携","Integration Apps API","アプリ一覧取得 - エージェント","1. 有効なインテグレーションアプリが存在すること","1. GET /api/v1/accounts/{account_id}/integrations/apps を実行 2. エージェントの認証トークンを使用","1. HTTPステータス200を返す 2. アクティブなアプリ一覧を返す 3. 機密情報（action等）を含まない","高","アプリ一覧"
"60","IT-060","外部サービス連携","Integration Apps API","アプリ一覧取得 - 管理者","1. 有効なインテグレーションアプリが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/integrations/apps を実行 2. 管理者の認証トークンを使用","1. HTTPステータス200を返す 2. アクティブなアプリ一覧を返す 3. 機密情報（action等）を含む","高","権限別表示"
"61","IT-061","外部サービス連携","Google OAuth","Google OAuth コールバック - 成功","1. 有効なアカウントが存在すること 2. Google OAuth設定が有効であること","1. GET /google/callback を実行 2. code、stateパラメータを含める","1. 受信ボックス設定画面にリダイレクトされる 2. Emailチャネルが作成される 3. provider_configが設定される","高","spec/controllers/google/callbacks_controller_spec.rb"
"62","IT-062","外部サービス連携","Google OAuth","Google OAuth コールバック - 既存inbox更新","1. imap_loginが一致するEmailチャネルが存在すること","1. GET /google/callback を実行 2. code、stateパラメータを含める","1. inbox設定画面にリダイレクトされる 2. 既存チャネルのprovider_configが更新される","中","既存inbox更新"
"63","IT-063","外部サービス連携","Google OAuth","Google OAuth コールバック - エラー","1. 有効なアカウントが存在すること","1. GET /google/callback を実行 2. 無効なcodeを使用","1. ルートパス（/）にリダイレクトされる","中","エラーハンドリング"
"64","IT-064","外部サービス連携","WhatsApp","WhatsAppテンプレート同期","1. WhatsApp Cloudチャネルが存在すること 2. 管理者ユーザーが存在すること","1. POST /api/v1/accounts/{account_id}/inboxes/{id}/sync_templates を実行","1. HTTPステータス200を返す 2. TemplatesSyncJobがエンキューされる 3. 成功メッセージを返す","中","テンプレート同期"
"65","IT-065","外部サービス連携","WhatsApp","WhatsApp Healthステータス取得","1. WhatsApp Cloudチャネルが存在すること 2. 管理者ユーザーが存在すること","1. GET /api/v1/accounts/{account_id}/inboxes/{id}/health を実行","1. HTTPステータス200を返す 2. ヘルスデータを返す（display_phone_number、quality_rating等）","中","ヘルスチェック"
"66","IT-066","データベース連携","Public API","パブリックメッセージ取得","1. APIチャネルとコンタクトが存在すること 2. メッセージが存在すること","1. GET /public/api/v1/inboxes/{identifier}/contacts/{source_id}/conversations/{id}/messages を実行","1. HTTPステータス200を返す 2. 会話のメッセージ一覧を返す","高","spec/controllers/public/api/v1/inbox/messages_controller_spec.rb"
"67","IT-067","データベース連携","Public API","パブリックメッセージ作成","1. APIチャネルとコンタクトが存在すること 2. 会話が存在すること","1. POST /public/api/v1/inboxes/{identifier}/contacts/{source_id}/conversations/{id}/messages を実行 2. contentパラメータを含める","1. HTTPステータス200を返す 2. メッセージが作成される 3. contentが正しく設定される","高","パブリックメッセージ"
"68","IT-068","データベース連携","Public API","パブリックメッセージ作成 - 添付ファイル","1. APIチャネルとコンタクトが存在すること 2. 会話が存在すること","1. POST /public/api/v1/inboxes/{identifier}/contacts/{source_id}/conversations/{id}/messages を実行 2. content、attachmentsを含める","1. HTTPステータス200を返す 2. メッセージと添付ファイルが作成される","高","添付ファイル"
"69","IT-069","データベース連携","Public API","CSATサーベイ回答更新","1. CSAT用メッセージが存在すること 2. CSATサーベイレスポンスが存在すること","1. PATCH /public/api/v1/inboxes/{identifier}/contacts/{source_id}/conversations/{id}/messages/{message_id} を実行 2. csat_survey_responseを含める","1. HTTPステータス200を返す 2. CSAT回答が更新される 3. rating、feedback_messageが設定される","中","CSATサーベイ"
"70","IT-070","データベース連携","Public API","CSATサーベイ回答 - 期限切れ","1. 14日以上前のCSATメッセージが存在すること","1. PATCH /public/api/v1/inboxes/{identifier}/contacts/{source_id}/conversations/{id}/messages/{message_id} を実行","HTTPステータス422（unprocessable_entity）を返す","中","期限チェック"
