序章: カスタマーサクセスに寄り添うためのQAの役割
こんにちは。QA部門でEightとContract Oneの品質マネジャーを務めている三好秀治です。本稿では、Slack・Azure Logic Apps・Azure OpenAI Service・Notionを活用したお客様フィードバックの管理効率化と、カスタマーサクセスに寄り添う取り組みについてご紹介します。
カスタマーサクセスの向上には、お客様のフィードバックが不可欠です。これはプロダクト改善や顧客満足度向上に直結するからです。私たちは、フィードバックの自動分類や可視化を通じて迅速な対応を実現します。本記事では、この仕組みの構築方法を具体例を交えて説明します。
なお、セキュリティ上の理由からAPIキーや認証情報の管理は省略しますが、実際の運用ではこれらの適切な管理が不可欠です。ご留意ください。
第1章: Slackに集まるお客様の声を収集する仕組み
Sansanでは、Slackを通じて日常的にお客様からフィードバックを受け取っていますが、これを手動で管理するには多大な労力を要します。そこで、Slackで得られたフィードバックを自動で収集・整理するプロセスをご紹介します。
このシステムのアーキテクチャは、Slack → Azure Logic Apps → Azure OpenAI(GPT) → Notionという流れで構成されています。QA部門にはプログラミング経験の少ないエンジニアも在籍するため、コードレスで設計可能なAzure Logic Appsを採用しました。詳細は公式文書をご確認ください。
1.1 Slack APIの設定
まず、Slack APIを利用してフィードバックを収集するための設定を行います。
Slackアプリの作成
- Slack APIにアクセスし、新しいアプリを作成します。
- 必要なスコープを追加します。以下が必要です。
- channels:read: パブリックチャンネルへのアクセス。
- users:read: メッセージ投稿者の情報を取得するため。
イベントの取得
- Slack APIトークンを取得し、Azure Logic Appsで使用します。
- 対象チャンネルIDを確認し、そこからフィードバックを収集します。
1.2 Azure Logic Appsの設定
次に、Azure Logic AppsでSlackからフィードバックを受信し、自動で処理するワークフローを設定します。
HTTPトリガーの設定
- Azure Logic Appsの作成
- HTTPリクエストトリガーの設定
- Logic Apps内で、**「When an HTTP request is received(HTTPリクエストを受信したとき)」**というトリガーを追加します。これがSlackのメッセージを受け取るエンドポイントになります。
- 受信URIの設定
- HTTPトリガーを設定すると、Logic Appsが自動的にエンドポイントのURIを生成します。このURIをSlackの「Event Subscriptions」で設定し、メッセージの通知を受け取れるようにします。
Notionの準備
次に、Slackで取得したフィードバックをNotionに自動的に保存・整理するための準備を行います。
Notion Integrationの作成
- Notion APIでインテグレーションを作成し、APIキーを取得します。
- 取得したAPIキーをAzure Logic Appsで使用します。
データベースの設定
Notion内で以下のようなフィールドを含むデータベースを作成します。
- Title: フィードバックの要約。
- Slack Description: Slackのメッセージ内容。
- Slack URL: 元のSlackメッセージに戻るためのリンク。
- Date: フィードバックの投稿日。
第2章: Azure Logic Appsでのフィードバックデータの加工と整形
Slackから収集したお客様のフィードバックは形式が一定していないため、整理と整形が必要です。Azure Logic Appsを活用し、このフィードバックデータを解析・加工して、Notionに登録しやすい形に変換するプロセスをご紹介します。
2.1 JSONデータの解析(Parse JSONアクションの利用)
Slack APIから取得したメッセージデータは、通常JSON形式で提供されます。このデータを効果的に処理するには、「Parse JSON」アクションを使用し、フィードバックの内容を構造化データとして扱います。これにより、後続の処理が容易になります。
手順:
Parse JSONアクションを追加し、Slackメッセージを解析します。
メッセージ本文、投稿者、タイムスタンプなど、必要なフィールドを抽出し、スキーマを指定してデータを整形します。
スキーマ例:
{ "event": { "type": "message", "text": "お客様の要望の内容", // Slackに投稿されたお客様の要望やフィードバック "user": "USER_ID", // ユーザーIDを匿名化 "ts": "1697092886.429139", // タイムスタンプ "channel": "CHANNEL_ID", // チャンネルIDを匿名化 "event_ts": "1697092886.429139", // イベントタイムスタンプ "channel_type": "channel" // チャンネルの種類 }
このスキーマを活用することで、メッセージの内容を効率的に整理し、必要なデータを抽出する準備が整います。
2.2 データの整形と加工
Azure Logic Appsでは、フィードバックメッセージをNotionに登録する前に、「Compose」アクションや「Expression(式)」を用いてデータを整形します。以下に、メッセージデータの加工例を示します。
データの加工例:
URLやキーワードの抽出: メッセージ本文から特定のURLやキーワードを抽出し、別のフィールドに保存します。
受信日時の保存: Slackからメッセージを受信した日時をNotionに保存します。
{ "Date": { "type": "date", "date": { "start": "@{formatDateTime(utcNow(), 'yyyy-MM-dd')}", "end": null } }
投稿者IDを表示名に変換: SlackのユーザーIDを表示名に変換し、投稿者名として表示します。必要に応じて、Slack APIからユーザー情報を取得します。
2.3 Azure OpenAIを使ったタイトル生成の自動化
Azure Logic AppsとAzure OpenAIサービスを組み合わせることで、フィードバック内容から自動的にタイトルを生成できます。フィードバックの本文をGPTモデルに送信し、その要点を抽出してタイトルとして活用します。
手順:
Slackメッセージの内容をAzure OpenAI GPTモデルに送信
フィードバック本文をGPTに送信し、その内容から適切なタイトルを生成します。
{ "messages": [ { "role": "system", "content": [ { "type": "text", "text": "あなたはお客様からの要望を分類する担当です。" } ] }, { "role": "user", "content": [ { "type": "text", "text": "@{triggerBody()?['event']?['text']}" } ] } ] }
この自動化プロセスにより、フィードバックデータは適切に整形され、さらに各フィードバックに対して要点を捉えたタイトルが自動生成されます。
第3章: Azure Logic Appsで整形したデータをNotionに登録する方法
本章では、Azure Logic Appsを活用し、Slackから収集・整形したフィードバックデータを、GPTが生成したタイトルとともにNotionへ登録する手順を詳しく説明します。
3.1 Notion APIの設定
Notion APIを活用し、外部システムからNotionデータベースへデータを登録します。まず、Notion APIキーを取得し、Azure Logic Appsで使用できるよう設定します。
3.2 Azure Logic AppsでNotionへのデータ送信
Azure Logic AppsのHTTPアクションを使用し、GPTが生成したタイトルとフィードバックデータをNotionに送信します。データは適切にフォーマットされ、「Title」フィールドと「フィードバック内容」フィールドにそれぞれ分けて登録されます。
サンプルコード: GPTで生成したタイトルとSlackメッセージをNotionに送信
Azure Logic Appsを活用し、Slackから収集したフィードバックデータをもとにAzure OpenAI GPTが「タイトル」を生成します。GPTが抽出したフィードバックの要点はNotionの「Title」フィールドに、フィードバックメッセージ本文は別のフィールドに登録されます。以下に、GPTが生成したタイトルとSlackメッセージの内容をNotionに登録するサンプルリクエストを示します。
{ "parent": { "database_id": "YOUR_DATABASE_ID" }, "properties": { "Title": { "title": [ { "text": { "content": "@{body('Generate_Title')?['choices']?[0]?['message']?['content']}" } } ] }, "Slack Description": { "rich_text": [ { "text": { "content": "@{triggerBody()?['event']?['text']}" } } ] }, "Date": { "date": { "start": "@{formatDateTime(utcNow(), 'yyyy-MM-dd')}" } }, "Slack URL": { "url": "@{concat('https://slack.com/archives/', triggerBody()?['event']?['channel'], '/p', replace(triggerBody()?['event']?['ts'], '.', ''))}" } } }
このサンプルでは、GPTが生成したタイトルを「Title」フィールドに、Slackメッセージの本文を「Slack Description」フィールドに登録します。さらに、SlackメッセージのURLと投稿日時も、それぞれ対応するNotionのフィールドに記録されます。
結論: お客様の声を効果的に管理・分析する
カスタマーサクセスの実現と製品改善には、顧客からのフィードバックを効率的に収集・管理・分析することが不可欠です。本記事では、Slack、Azure Logic Apps、Azure OpenAI Service、そしてNotionを活用し、お客様の声を自動的にNotionに集約し、可視化・分析する技術的アプローチを詳述しました。
この仕組みにより、フィードバック管理の負担が大幅に軽減され、顧客の声をより迅速に製品改善に反映できるようになります。
今後も、Azure Logic Appsをはじめとする自動化ツールを積極的に活用し、さらに効率的なフィードバック管理システムの構築に努めます。これにより、継続的な製品改善を実現してまいります。