> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforceの商談を取得する

> OpenAI、NextJS、Auth0-AI SDKを使用してSalesforceの商談を取得します

**Next.js**

前提条件

開始する前に、以下の手順を完了していることを確認してください。

## Vercel AIツールとバックエンドAPIルートを定義する

Salesforceから商談の一覧を取得するAIツールと、Auth0を使ってSalesforceのアクセストークンを取得するバックエンドルートを作成します。

* ツールで`auth0.getAccessTokenForConnection()`を呼び出す際は、接続名として`sfdc`を渡すと、Salesforceのアクセストークンを取得できます。

```tsx app/api/chat/route.js wrap lines theme={null}
import { openai } from "@ai-sdk/openai";
import { streamText, tool } from "ai";
import { z } from "zod";
import { auth0 } from "@/lib/auth0";

export const maxDuration = 60;

export async function POST(req) {
  const { messages } = await req.json();

  const system = `You're a helpful AI agent that helps analyze salesforce data`;

  const response = streamText({
    model: openai("gpt-4o"),
    messages,
    system,
    maxSteps: 10,
    tools: {
      listOpportunities: tool({
        // 商談の一覧を取得するSalesforceツール呼び出し
        description: "Get a list of opportunities from Salesforce",
        parameters: z.object({
          limit: z
            .number()
            .default(10)
            .describe("The maximum number of opportunities to return"),
        }),
        execute: async ({ limit }) => {
          const instanceUrl = process.env.SALESFORCE_INSTANCE_URL;

          const endpoint = `query/?q=${encodeURIComponent(
            `SELECT Id, Name, StageName, CloseDate FROM Opportunity LIMIT ${limit}`
          )}`;
          const url = `${instanceUrl}/services/data/v57.0/${endpoint}`;

          // auth0を呼び出してアクセストークンを取得する
          const { accessToken } = await auth0.getAccessTokenForConnection({
            connection: "sfdc",
          });

          const response = await fetch(url, {
            method: "GET",
            headers: {
              Authorization: `Bearer ${accessToken}`,
              "Content-Type": "application/json",
            },
          });
          return await response.json();
        },
      }),
    },
  });
  return response.toDataStreamResponse();
}
```

## フロントエンドのチャットUIから呼び出す

`@ai-sdk/react`のHooksを使用して、チャットコンポーネントを組み込みます。

```tsx src/components/chat.tsx wrap lines theme={null}
"use client";
import { useChat } from "@ai-sdk/react";
export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat();
  return (
    <div className="flex flex-col w-full max-w-3xl py-24 mx-auto stretch text-gray-100">
      {messages.map((message) => (
        <div key={message.id} className="whitespace-pre-wrap">
          {message.role === "user" ? "User: " : "AI: "}
          {message.parts.map((part, i) => {
            switch (part.type) {
              case "text":
                return <div key={`${message.id}-${i}`}>{part.text}</div>;
            }
          })}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input
          className="fixed bottom-0 w-full max-w-3xl p-2 mb-8 border border-zinc-300 rounded shadow-xl"
          value={input}
          placeholder="Say something..."
          onChange={handleInputChange}
        />
      </form>
    </div>
  );
}
```

## UIの例

`https://localhost:3000`にアクセスすると、チャットUIが表示されます。

&#x20;

![Salesforceの商談を取得するチャット
UI](https://mintlify.s3.us-west-1.amazonaws.com/auth0/docs/images/ai/how-tos/get_salesforce_opportunities_chat_ui.png)

チャットUIをカスタマイズすれば、構造化された結果を表やグラフ、要約などの形式で表示することもできます。ユーザーが`Get me 2 opportunities from Salesforce`のようなメッセージを送信すると、GPT-4がリクエストを解釈して`listOpportunities`ツールを呼び出します。このツールは、Auth0経由で取得したアクセストークンを使ってSalesforce APIを安全に呼び出し、結果を返します。

**LangChain**

近日公開予定です！

**LlamaIndex**

近日公開予定です！

**GenKit**

近日公開予定です！

## アカウントリンク

Salesforce と統合していて、ユーザーが別の
方法（ユーザー名とパスワード、または別の外部プロバイダーなど）でサインインできるようにするには、これらの
ID を1つのユーザーアカウントにリンクする必要があります。Auth0 では、このプロセスを
[アカウントリンク](/docs/manage-users/user-accounts/user-account-linking)
と呼びます。

アカウントリンクは、以下とは別の機能です。
[Token Vault の接続済みアカウント](/docs/secure/call-apis-on-users-behalf/token-vault/connected-accounts-for-token-vault.md)
：

<ul><li>アカウントリンクでは、複数の Auth0 ID をサインイン用の1つのユーザープロファイルに統合します。</li>
<li>Token Vault の接続済みアカウントでは、サインイン中のユーザーが外部
プロバイダーを認可できるため、Auth0 はそのプロバイダーのトークンを Token Vault に保存できます。</li></ul>

アプリケーションで
[Organizations](/docs/manage-users/organizations.md) を使用している場合は、接続済みアカウントのフローを開始する前に、
対象の Organization でユーザーを認証してください。Organizations
はセッションコンテキストを定義しますが、Organization 用の共有外部アカウントを作成するものではありません。

アカウントリンクのロジックと処理は、アプリまたはエージェントによって異なります。
実装例は  [Next.js チャットボットアプリ](https://github.com/auth0-lab/market0/blob/main/app/api/auth/%5Bauth0%5D/route.ts#L43)で確認できます
。質問がある場合やベストプラクティスをお探しの場合は、
[Discord に参加](http://discord.gg/XbQpZSF2Ys)し、
`#auth0-for-gen-ai` チャンネルで質問してください。
