見出し画像

ChatGPTを利用して、Salesforceの活動の記録/ToDoを、Backlogの課題コメントに自動投稿する仕組みを作った話

※このnoteは、ヌーラボブログリレー2023 for Biz Advent Calendar 2023の12月25日の記事です。

こんにちは。塩谷です。

縁あって2022年9月からヌーラボのマーケティング部に在籍しています。

ヌーラボでは、メールマーケティング、CRM/MA管理運用、業務自動化などのオペレーション、リードアクティビティ分析/レポーティングなどの(狭義の)インバウンドマーケティング領域を担当しています。ちょこっとだけGASを書くことができたりしますが、非エンジニアのビジネスサイドの人間です。社外では4回戦のプロボクサーだったり、一児の父だったり。

今回は ヌーラボブログリレー2023 for Biz Advent Calendar 2023 の記事いうことで、担当領域のCRMやオペレーション周りのネタを一つ。

少し今更感のあるタイトルですが、ChatGPTを使ってApexコードを生成し、SalesforceとBacklogを連携させたお話を書かせていただきます。

この記事は、技術的な話やサンプルコードの掲載ではなく、どのように考えて仕様を決め、どのようなステップでSalesforceとBacklogを連携させたかをテーマにしています。


はじめに

SalesforceとBacklogの接続/連携と言えば、ヌーラボ公式パートナーとしてもおなじみの、ADXコンサルティングさんの Backlog Sync ですね。

※とても素晴らしいツールが1ヶ月無料でお使いいただけますので、まだお試しされていない方は是非お試しください。インストールはこちらから可能です。

このような素晴らしいツールが出てきましたが、SalesforceとBacklogの連携事例はまだまだ多くありません。

この記事では、SalesforceとBacklogのどちらも使っている界隈のナレッジの一つになればと思い、僭越ながら過去に自身で作成したツール "BacklogConnect" について書かせていただきます。

※なお、このBacklogConnectについては、2023年4月頃に作成しているため、ChatGPTを利用して作成しました。SalesforceのApex GPTは利用していません。各種情報についても、現状とは変わっている可能性もありますのでご了承ください。


この記事のざっくりとしたまとめ

ここだけ読んでいただければ、何が書いてあるかわかりますので、お時間がない方はこちらを読んで、興味があれば最後までお読みください。

やったことと、その効果

  • ChatGPTでApexコードを生成して、Salesforceの活動の記録(ToDo/Event)を指定したBacklog課題キーの課題コメントに自動で入力させる仕組みを作った

  • 仕組みを作るにあたって、何をやるべきで、何をやらないかを明確にして、既存のオペレーションや他部門への影響を抑えた

  • ログを入力することへのストレスと、転記作業時間の短縮、作業忘れを防止することができた

  • メイン業務に比例して増える業務を効率化することで、効率化の効果も比例して高くなる

仕組みを作成する時の感想

  • GPTを使うことで、"そこまで知識がなくても"作ることができる

  • しかし、"全く知識や経験が無い状態でから作成するのは難しい"

  • 何よりも重要なのは、ChatGPTが誤った情報を返してエラーとなった時に、"リファレンスを探したり、最後までバグ調査をする根気"


連携機能作成のステップ

起きている問題

お客様との個別相談会/商談を行った後、ログを残すためにSalesforceに各種情報を入力するのは、Salesforceを使っている企業では当たり前のことかと思います。弊社ではその入力内容を「Backlogに転記する」という運用をしていました。

個別相談会/商談のお申し込み情報Calendlyやimmedioを通して、Salesforceに格納されますが、
同時にBacklogにも自動で課題登録されるようになっています。
これは、閲覧者がアカウント保持者に限定されるSalesforceに残されたお客様への応対記録を
Salesforceアカウントを保持していない部門でも必要に応じて参照ができるようにする、という目的です。

課題自体はBacklogの「メールによる課題登録」の機能を使うことで自動で登録されます。
しかし、個別相談会/商談を行った記録は、Salesforce上でヒアリング内容をフィールドに入力する必要があります。

個別相談会/商談予約が入ったあとの顧客データの流れのイメージ図

これが鬼門で、情報共有のために必要なものであるものの、

  • 複数の場所に同じ内容を入力することによる手間と、更新漏れのリスクがあること

  • フィールドが別れているため、単純なコピペだけでは相互転記ができない

こういった問題が発生していました。
これを解決したいのはもちろん、ログをしっかり残せば残すほど、コピペ時の整形作業が手間になること、個別相談会/商談が増えれば増えるほど手間が増えてしまうこと、つまり、真面目に/しっかりとやればやるほど大変になっていく仕組みを変えたいという思いで着手することにしました。

スコープの整理と定義

まずはやりたいことをざっくりとイメージし、何をどこまでやるのか、または実現可能なのかを整理しました。

やらなくてはいけないこと/やりたいことの整理
下記の2つを最低限やらなくてはいけない/やりたいこととして決めました。

  • 現状の「情報共有」できている内容は最低限維持する

  • 情報を正しく入力することへの心理的・時間的負担を軽減する

改善方法の検討
まずは情報共有の目的を達成しつつも、違う方法で目的を遂行できないかを検討しました。

  1. Salesforceアカウントを全員が持つ → コスト面から断念

  2. Salesforceの情報をスプレッドシートに吐き出し、閲覧できるようにする → 運用オペレーション等の影響から断念

特に、2のSalesforceの情報をスプレッドシートに吐き出して閲覧・更新ができる仕組みは、Salesforce Connector や G Connector for Salesforce
を利用して、検索するための主キーを設定してテーブルのような構造を作り、それを参照する検索シートをGoogle Apps Scriptで作成することで実現が可能です。

もちろん、閲覧だけでなく、スプレッドシートに指定のフォーマットを用意しておき入力してもらうことで、Salesforceのデータローダーを使って取り込むことで、情報の更新や入力も(リアルタイムではないものの)可能になります。

実際にこの方法でアカウント非保持者でも情報の閲覧・更新をする仕組みを作成した経験があったため、こちらを採用しようと思っていました。しかし、この方法で解決することは、既存のオペレーションからの変更だけでなく、新たなオペレーションを追加する必要もあり、その運用の定着・安定化に時間がかかりそうだったため今回は見送ることに。

そのため、改めて "仕組みを実装することによる影響範囲を小さくしつつ、効率化をする方法" を決めるために、スコープの設定と同時に実装方法を調査する必要がありました。もちろん実装方法についても、実現可能であることはもちろん、コストや他のメンバーに工数がかからないものであること、という条件の下で考えなければなりません。

ここで、やらなくてはいけないこと/やりたいこと だけではなく、やらないこと/やってはいけないことを明確にしました。

やらないこと/やってはいけないこと

  • 他部門のオペレーションを変えるような改善をすること

  • 実装にあたって、他のメンバーに工数をかけないこと

  • 目的のためとは言え、オペレーションを変更すること、特に追加をすること

この辺りを遵守しながらも問題を解消する方法を検討したところ、「Salesforceにログを入力すると同時にBacklogにその内容を転記するApex」を作成し、SalesforceからBacklog APIを叩く方法が良さそうだなとあたりをつけました。(※他に良い方法を思いついた方は是非お知らせください)

実装方法を考える前に検討したこと

SalesforceからBacklog APIを叩くために何をすれば良いのか、また、それは自分の技術スキルで実現が可能なのか、追加コストはかかるのか、実装までにどれくらいの時間がかかりそうか、などリサーチすべきことはたくさんありましたが、一つずつ調べながら解消し、解消しないものについては気合と根性でなんとかしようと試行錯誤して乗り越えようと腹を括りました。

  • SalesforceからBacklog APIを叩くために何をすれば良いのか

    • Apexを書くだけではなく、他にもいくつか設定が必要になる

    • Apexコードを作成・テスト・デプロイするにはSandboxで作成、検証が必要

    • 転記するフォーマットの整理と定義

  • それは自分の技術スキルで実現が可能なのか

    • ちょっと現状では難しそう…

    • 自力でApex書けるようになるには、時間がかかりそう

    • オブジェクトの構造やSOQLについてはちょっとやれば思い出せそう

  • 追加コストはかかるのか

    • Apexで自力でやるだけならばノーコスト

  • 実装までにどれくらいの時間がかかりそうか

    • ちょっと想像しにくいので 気合と根性でなんとかしよう(そもそも業務命令でも無いので)自学・自由研究のように気楽に進めればOK

こんな感じのことを考えて、ChatGPTに「SalesforceとBacklogの連携方法」のアイデアをいくつか出してもらい、そのアイデアの検証のため、先人が残されたブログやNote、ヘルプ記事、TrailHeadの課題、コミュニティの投稿など、色々と参考にしつつ、なんとなくの方向性を決めました。

ここからChatGPTとSandboxの往復が始まります。

ChatGPTを用いたApexコードの生成

さて、ここからは実際にChatGPTを用いたApexコードの生成について、書いていきます。

実際にどういう情報がBacklogに残っていればよいかを整理し、SalesforceからBacklogに転記される必要のあるフィールドは何か、どういう時にエラーを出すかなどをある程度自分で考えて、ChatGPTに投げます。

ChatGPTへの最初の投げかけ

以下は実際に当時投げかけた最初のプロンプトです。

あなたはSalesforceとBacklogの連携問題を解決するコンサルタントです。最新のSalesforceの知識と、Backlogの知識を有しています。またどちらも日本語版の機能について詳しいです。 下記の課題が解決するように協力してください。まずは解決策の案へのフィードバックと、それを実現するためのステップを教えてください。

■背景
私は、BacklogとSalesforceのどちらも使用しているセールスパーソンです。 お客様と商談した記録をBacklogとSalesforceのどちらにも記載する必要があります。 Backlogには、該当のお客様の情報が書かれた課題がすでに立てられています。その課題のコメントにフリーフォーマットで記載する必要があります。

Salesforceには、取引先責任者またはリードの該当のお客様の「活動の記録」に指定されている項目を選択または埋める形で記録を残しています。 現在はSalesforceに情報を記載後、表示されている情報をコピーし、Backlogの課題コメントに手動でペーストし、文章レイアウトを整えて投稿しています。

■課題
SalesforceとBacklogの両方に入力するのが手間になっています。現状の業務ルール上、どちらにも転記する必要があるため、これは変更できません。今は、Salesforceの活動の記録にある情報を手動でコピーし、Backlogの課題コメントにペーストしています。ペースト時に、文章レイアウトがおかしくなっているため、手動で整形しています。

■解決策の案
Salesforceの活動の記録に入力する際に、自動でBacklogの指定した課題コメントに自動で転記される仕組みを作りたいと思っています。この仕組みの簡易的な仕様は下記を参照してください。

1. Salesforceで、取引先責任者またはリードに関連付ける形で活動の記録を入力します。

2. その活動の記録(ToDoやイベント)は、取引先責任者やリードオブジェクトのグローバルアクションで作成できるようになっています。

3. 入力すべき項目は「件名」「名前」「コメント」「Backlog_Task_Num」です。ただし、「名前」は取引先責任者またはリードが自動的に入力されています。また、「Backlog_Task_Num」はActivityオブジェクトに項目追加しています。Taskオブジェクト・Eventオブジェクトには、その「Backlog_Task_Num」のカスタムフィールドが利用できるように、グローバルアクションの表示項目が作成されています。

4. 活動の記録(TaskまたはEventの入力)が終わると同時に、BacklogのAPIを呼び出し、「Backlog_Task_Num」で指定した課題番号の課題コメントに、活動の記録で入力した件名、名前、コメントを転記します。

5. 活動の記録(TaskまたはEvent)の作成時だけでなく、編集時にもBacklogの新たなコメントとして自動で転記されます。転記される情報には、日本語が含まれる可能性があるため、UTF-8を使用します。特殊文字は考慮外とします。

6.課題番号が誤っている場合はエラーメッセージを表示させて、活動の記録を再入力させるようにSalesforce上で表示を出します。Backlogの課題コメントが存在しない場合には、最初の課題コメントとして登録します。

7.Salesforce上で活動の記録の修正時にも新たな課題コメントとして登録します。なお、一度Backlogに書かれた課題コメントはBacklog上からのみ編集が可能とします。



結構抜け漏れなどがあると思いますし、雑に書かれているなーと思われた方もいらっしゃるでしょう。ただ、このレベル感の投げかけでもフィードバックをもらいながら改善していくことで、満足の行く仕様書(のメモ)のようなものを作成することが可能です。

これを投げかけて、もらったフィードバック内容を反映してや実装ステップを定義してもらいます。その後、そのステップを一つずつ達成するための歩法を確認していきます。

以下は今回のために改めて投げかけて、回答してもらった実装ステップを抜粋しています。

実装ステップ
1.カスタムフィールドの追加
2.グローバルアクションの設定
3.ApexコードによるAPI連携の実装
4.エラーハンドリングの実装
5.テストとデバッグ
6.ユーザートレーニングとドキュメンテーション

ChatGPTに回答してもらった実装ステップ

こんな感じで、やるべきことを明確にしてくれます。
あとはこれに沿って、具体的なやり方を聞きながら進めていくだけです。

しかし、ここからが本当の地獄の始まりだったのです……

エラーの連発

実装ステップの2までは、とてもスムーズに進みましたが、3のApexのコードによるAPI連携の実装で何度も泣きました……

まず、最初からがっつり仕様を決めた状態でコード生成をしてもらうと、エラーが発生するコードばかり作成されてしまいます。

実行してエラーログを見ると、変数の宣言がなかったり、必要な処理が抜けていたりするのが理解できるのですが、最初の時点ではぱっと見それが正しいのかわかりません。

エラー内容を伝えて、再度生成を試みるも、また違うエラーが発生する……これの繰り返しです。エラーが出た箇所の修正ができないのは、(少なくとも2023年4月時点の)ChatGPTの致命的な欠点ですが、背景には自身のスキル不足もあるので、責めることはできません。エラーメッセージとにらめっこしながら、改善を繰り返していきました。

その中でエラーと向き合うコツというか、非エンジニアでもエラーが出にくいコード生成のコツ、早くゴールに進むコツのようなものを掴んできた気がします。

  • 最低限の仕様からスタートする

    • 全てのフィールドを転記するようなコードを最初に書いてもらうのではなく、一つのフィールドを転記するだけにする、など。

    • 少しずつ作り上げていくことで、成果が可視化されるので、進んでいる実感が湧いてくる。

    • 何をしたらエラーになるのか、どこがエラーになるのか、ステップごとに理解がしやすい。

  • エラーメッセージを読み、調べて、原因を正しく理解する

    • エラーメッセージを読んだだけではわからないから、すぐにChatGPTに改善策を問いたくなるのをこらえて、エラーの詳細を調べる。

    • エラーの詳細を聞いたり、調べてみたり、エラーの原因を正しく理解することが、結果への近道になる。

  • わからなければ公式のリファレンスを参照する

    • 餅は餅屋。公式が一番正しく、最新の情報を提供してくれる。

    • ChatGPTは全ての答えを出してくれるわけではないので、当然誤った回答もたくさん生成される。

    • そのため、行き詰まったときには、必ず公式のリファレンスや最新の情報にあたることで解決することもある。

少しずつ掴んできたのは、こんな感じのことでした。これって、普段の業務でもやっていることのはずです。が、ChatGPTを使うということで、ついつい頼りすぎて、雑になってしまっていたなと反省しました。

この辺りのことを頭に入れて作業をすることで、一気に作業が進んだ気がします。

これはコードの生成だけでなく、その後のステップでもかなり生きてきました。

テストコードの作成

SalesforceでApexコードをデプロイするためには、テストコードを書いて一定以上のカバレッジを満たす必要があります。お客様の情報や企業の基幹部分に関わる情報が入っているため、こういうクオリティを担保するためのセーフティーがあることは素晴らしいことだと思います。が、一方で作成する側からすると、これがなかなか大変だったりします。

テスト駆動開発ってやつでしょうか。正直なかなか取っ付きづらいかと思います。めんどくさいなーとか思っちゃう人も多いと思います。

そこでChatGPTの出番です。

ここのテストコードの作成フェーズが最もChatGPTを使っててよかったなと思ったところです。テストパターンだったり、どういうコードを書いたら良いかが正直わからないという非エンジニアは多いかと思います。ここがハイライトでした。ハイライトであるにも関わらず、このステップは本当に早く済んであまり書くことが無いくらいです。

完成後

実際に完成したもののイメージがこちらです。

Salesforceの活動の記録で入力する画面イメージ
Salesforceから連携された情報がBacklogの課題コメントに投稿されるイメージ

今回はテスト環境ですので、項目名などは仮で作成したものですが、こんな感じのイメージで情報が連携されるようになりました。Salesforceで入力する際に用意しているフィールドごとに情報が自動で整理されて転記されるため、コピペの手間はもちろん、Backlog課題コメントに入力する際の整形の手間が軽減されました。

成果イメージ

このツールで自動化することによって、効率化された時間を出すのであれば、こんなイメージになります。

転記作業に掛かる時間を5分として、月20件・年間240件の個別相談会/商談を行うとしたら、1200分、年間で20時間分の無駄時間の削除ができています。

もし、たくさん書いた内容を整形するのに10分かかるならば、40時間の削減ができています。

また、個別相談会/商談件数が2倍になれば、80時間の時間削減ができます。

もちろんこういった直接的な時間の削減だけでなく、

  • 転記するという面倒な作業への心理的負荷の軽減

  • 転記忘れによる情報共有ミスの防止

  • 万が一の転記忘れ時にも、課題キーを入力するだけですぐに転記が完了する

という定性的な成果もあるのではないかと思います。個人的には、転記の際のフォーマットの整形が本当にストレスだったので、商談後の気が楽になりました。きっと、実際に削減できた時間よりもよっぽど大事でプライスレス、いや、ハイバリューのはずです。そう思わせてといてください。


非エンジニアがChatGPTを使ってSalesforceとBacklogを接続した感想

感想


正直、結構大変でした。

自学・自由研究として休日とかにも実際に手を動かしたり、ChatGPTにどう投げかけると良いか試したりしていたので、それなりに時間がかかりました。

ただ、その分ChatGPTを活用しながら開発する術を身につけることができたのと、Salesforceについてより深く知ることができたのは収穫でしたね。

最近では、ChatGPTを使ってPythonを学ぶ本も出たりしていますが、学びに使うのも有りだなーと思いました。ただし、検証する習慣やその術、つまりリテラシーが無いとより深く活用するのは難しいなと思っています。G検定を取得しているので、たぶんそれなりにディープラーニングや生成AIについて知っているかなと思っていましたが、本質的な活用にはまだまだ至らないなと感じています。

実際に浅い知識の中で、こういった連携機能を作成することができたのはChatGPTのおかげではありますが、一方でChatGPTだけに頼っていては実現は難しかったなと思います。

一番の学び

エラーを解決するために自分自身で調べること、理解することが必要なのはもちろん、何よりも、誤った情報を返してくる時やエラーが発生した時にも心くじけずに向かい合うことができる根気が必要でした。やはり気合と根性全てを解決する。

機会があれば、どういったコードを生成してカスタマイズや修正を行ってきたのかを書きたいと思います。機会があれば。

それでは、みなさん、良いBacklog&Salesforce&ChatGPTライフを。

この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?