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

# Obtenir les opportunités Salesforce

> Utilisez OpenAI, NextJS et les SDK Auth0-AI pour obtenir les opportunités Salesforce

**Next.js**

Informations requises

Avant de commencer, assurez-vous d’avoir effectué les étapes suivantes :

## Définir l’outil Vercel AI et la route d’API côté serveur

Créez un outil d’IA qui récupère une liste d’opportunités dans Salesforce, ainsi qu’une route côté serveur qui utilise Auth0 pour obtenir un jeton d’accès Salesforce :

* Lorsque l’outil appelle `auth0.getAccessTokenForConnection()`, transmettez `sfdc` comme nom de connexion pour obtenir un jeton d’accès 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({
        // appel de l'outil Salesforce pour obtenir une liste d'opportunités
        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}`;

          // appeler auth0 pour obtenir le jeton d'accès
          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();
}
```

## Appeler l’outil depuis l’UI de clavardage côté client

Utilisez le hook `@ai-sdk/react` pour connecter le composant de clavardage :

```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>
  );
}
```

## Exemple d’UI

Rendez-vous à `https://localhost:3000` pour voir l’UI de clavardage :

&#x20;

![UI de clavardage pour obtenir des opportunités
Salesforce](https://mintlify.s3.us-west-1.amazonaws.com/auth0/docs/images/ai/how-tos/get_salesforce_opportunities_chat_ui.png)

Vous pouvez personnaliser l’UI de clavardage pour afficher des résultats structurés sous forme de tableaux, de graphiques ou de résumés. Lorsque l’utilisateur envoie un message comme `Get me 2 opportunities from Salesforce`, GPT-4 interprète la requête et invoque l’outil `listOpportunities`, qui appelle l’API Salesforce de façon sécurisée à l’aide de jetons d’accès obtenus par l’intermédiaire d’Auth0, puis renvoie les résultats.

**LangChain**

À venir!

**LlamaIndex**

À venir!

**GenKit**

À venir!

## Liaison de comptes

Si vous intégrez Salesforce et souhaitez permettre aux utilisateurs de se connecter au moyen d'une autre
méthode (p. ex., un nom d'utilisateur et un mot de passe ou un autre fournisseur externe), vous devez associer
ces identités à un même compte utilisateur. Auth0 appelle ce processus
[Liaison de comptes](/docs/manage-users/user-accounts/user-account-linking)
.

La liaison de comptes est distincte des
[Comptes connectés pour le coffre-fort de jetons](/docs/secure/call-apis-on-users-behalf/token-vault/connected-accounts-for-token-vault.md)
:

<ul><li>La liaison de comptes regroupe plusieurs identités Auth0 dans un seul profil utilisateur pour la connexion.</li>
<li>Les comptes connectés pour le coffre-fort de jetons permettent à l'utilisateur connecté d'autoriser un fournisseur externe
afin qu'Auth0 puisse stocker les jetons du fournisseur dans le coffre-fort de jetons.</li></ul>

Si votre application utilise
[Organizations](/docs/manage-users/organizations.md), authentifiez
l'utilisateur auprès de l'organisation cible avant de lancer le flux des comptes connectés. Les Organizations
définissent le contexte de la session ; elles ne créent pas de compte externe partagé pour l'organisation.

La logique et la gestion de la liaison de comptes varient selon votre application ou agent.
Vous trouverez un exemple d'implémentation dans une  [application de robot conversationnel Next.js](https://github.com/auth0-lab/market0/blob/main/app/api/auth/%5Bauth0%5D/route.ts#L43)
. Si vous avez des questions ou recherchez des pratiques exemplaires,
[joignez notre Discord](http://discord.gg/XbQpZSF2Ys) et posez vos questions dans le canal
`#auth0-for-gen-ai`.
