接続関連
スプレッドシートの workbookId を取得する方法
DingTalk スプレッドシートにはそれぞれ一意の識別子として workbookId が割り当てられています。取得方法は以下のとおりです。
-
スプレッドシートの URL から取得:DingTalk スプレッドシートを開き、URL に含まれるドキュメントIDが
workbookId です。
-
ドキュメント情報から取得:スプレッドシート左上の「メニュー」→「スプレッドシート」→「ドキュメント情報」をクリックし、そこに表示されるドキュメントIDが
workbookId です。
-
ナレッジベース API から取得:ノード取得 API を呼び出し、戻り値の
nodeId(dentryUuid)が workbookId です。
operatorId を取得する方法
operatorId は操作者の unionId です。取得手順は以下のとおりです。
- 電話番号から userId を取得:電話番号でユーザーを検索 API を呼び出します。
- userId から unionId を取得:ユーザー詳細を取得 API を呼び出し、戻り値の
unionId が operatorId です。
初回呼び出し時、アプリで「連絡先」関連の権限申請が必要になる場合があります。取得した operatorId は環境変数として保存しておき、毎回 API で取得しないようにすることを推奨します。
アクセストークンが期限切れになった場合の対処方法
アクセストークンの有効期限は 7200 秒(2 時間) です。期限切れ後は、社内アプリの accessToken を取得 API を再度呼び出して新しいトークンを取得する必要があります。
アプリ側でトークンのキャッシュと自動更新の仕組みを実装することを推奨します。
- トークンとその有効期限をキャッシュする。
- 期限切れ 5 分前に能動的に更新する。
- API がトークン無効エラーを返した場合、直ちに更新して再試行する。
API 呼び出し時に The operator has no permission エラーが発生した場合の対処方法
このエラーは operatorId に対応するユーザーが対象スプレッドシートの操作権限を持っていないことを示します。以下を確認してください。
-
ユーザーがスプレッドシートへのアクセス権限を持っているか:該当ユーザーがスプレッドシートの共同編集者として追加されているか、またはスプレッドシートが所属するナレッジベースで該当ユーザーに権限が付与されているかを確認します。
-
権限タイプが一致しているか:
- 読み取り操作:
GetAllSheets、GetSheet、GetRange などは Document.Workbook.Read 権限が必要です。
- 書き込み操作:
AppendRows、UpdateRange、CreateSheet などは Document.Workbook.Write 権限が必要です。
-
アプリが対応する権限を申請しているか:DingTalk オープンプラットフォーム のアプリ管理で、該当する権限スコープを申請し承認されているかを確認します。
API 利用関連
sheetId パラメーターにワークシート名を指定できますか
可能です。sheetId パラメーターはワークシートの ID または 名称(見出し) の指定をサポートしています。例:
- ID 指定:
Sheet1、システムが生成した ID。
- 名称指定:
売上データ、ユーザーがカスタム設定したワークシートの見出し。
推奨:名称はユーザーによって変更される可能性があるため、ワークシート ID の使用を優先してください。GetAllSheets API ですべてのワークシートの ID と名称を取得できます。
AppendRows でデータを追加する際、データはどこに書き込まれますか
AppendRows はワークシート内の 最後のデータが存在する行 を自動的に検出し、その下に新しい行を追加します。
- ワークシートが空の場合、データは 1 行目から書き込まれます。
- 追加する列数は既存データの列数と一致させ、データの揃えを保つようにしてください。
UpdateRange でセルを更新する際、rangeAddress の形式は何ですか
rangeAddress は A1 表記法 を使用します。一般的な形式は以下のとおりです。
GetRange と UpdateRange の違いは何ですか
GetRange は、データ書き込み後の結果検証や、自動化フロー内でスプレッドシートのデータを読み取り後続処理を行う場合に適しています。両者は同じ rangeAddress パラメーター(A1 表記法)を使用してセル範囲を指定します。
API 呼び出しで invalidRequest.resource.notFound が返された場合の調査方法
このエラーはリクエストされたリソースが存在しないことを示します。よくある原因は以下のとおりです。
DingTalk スプレッドシート API の利用制限
コード内で API 呼び出しに失敗した場合のハンドリング方法
以下のエラーハンドリング戦略の実装を推奨します。
- トークン期限切れ時の自動更新:トークン無効エラーをキャッチし、自動更新後に再試行します。
- レート制限時の再試行:429 エラーを受信した場合、一定時間待機してから再試行します(指数バックオフ戦略の使用を推奨)。
- 冪等性の確保:書き込み操作(
AppendRows など)では、再試行によりデータが重複して書き込まれる可能性があることに注意してください。データに一意の識別子を含め、書き込み後 GetRange で検証することを推奨します。
- タイムアウト処理:ネットワークリクエストには適切なタイムアウト時間(30 秒を推奨)を設定し、タイムアウト後に再試行します。