Skip to main content

Estou tentando implementar o chatbot no meu projeto em Next.js. Tentei das duas formas, mas ocorrem os seguintes problemas:


Via script:

Mesmo utilizando o .withTarget('page-wrap'), o layout do blip fica quebrado, tendo que o button perde completamente as configs default e oculpa 100% da tela.

Estou utilizando nesse formato:


<script src="https://unpkg.com/[email protected].*" type="text/javascript"></script>
<script
dangerouslySetInnerHTML={
{__html: `
(function () {
window.onload = function () {
new BlipChat()
.withAppKey("minha appkey")
.withButton({ color: "#00F0FA" })
.withTarget('page-wrap')
.build();
}
})();
`}
}
/>

Via import { BlipChat } from "blip-chat-widget";:


Após instalação via npm (npm install blip-chat-widget), o recebo um warning do import no vscode com a seguinte mensagem:



Could not find a declaration file for module ‘blip-chat-widget’. ‘/Users/renanvieira/Documents/my-repository/node_modules/blip-chat-widget/dist/blip-chat.js’ implicitly has an ‘any’ type.



e ao consumir o import, conforme abaixo:


useEffect(() => {
new BlipChat()
.withAppKey("minha appkey")
.withButton({ color: "#00F0FA" })
.build();
});

Eu recebo o retorno de “self is not defined”.



Qual seria a forma mais correta de implementar o blip em um projeto em Next.js ?

Tive o mesmo problema aqui ao tentar adicionar o blip em nosso projeto nextjs. Conseguiu resolver de alguma forma?


Estou com o mesmo problema, alguém conseguiu resolver?


Opa, consegui encontrar uma solução.

A nova versão do Next, introduziu o Script Component. Usando ele eu consegui inserir o chatbot no meu projeto.



Olá boa tarde, além desse código você fez algo a mais? tentei da mesma forma e o mesmo erro de self ocorreu, mesmo utilizando dynamic, você ainda lembra como fez ou possui o repositório como fez?


Bom dia, já faz um bom tempo desde a última resposta, mas essa semana me ocorreu o mesmo problema e gostaria de compartilhar a solução que utilizei, decidi criar um componente do lado cliente do projeto que carrega o script da seguinte forma:

"use client";
import { useEffect } from "react";

// Extend the `Window` interface to include BlipChat and blipChatInitialized
declare global {
interface Window {
BlipChat?: {
new (): {
withAppKey(key: string): BlipChatInstance;
withButton(options: { color: string; icon: string }): BlipChatInstance;
withCustomCommonUrl(url: string): BlipChatInstance;
build(): void;
};
};
blipChatInitialized?: boolean;
}

interface BlipChatInstance {
withAppKey(key: string): BlipChatInstance;
withButton(options: { color: string; icon: string }): BlipChatInstance;
withCustomCommonUrl(url: string): BlipChatInstance;
build(): void;
}
}

const BlipChatComponent: React.FC = () => {
const blipChatKey = process.env.NEXT_PUBLIC_BLIP_APP_KEY as string; //your blip key

useEffect(() => {
if (!window.blipChatInitialized) {
const script = document.createElement("script");
script.src = "https://unpkg.com/blip-chat-widget";
script.type = "text/javascript";
script.async = true;

script.onload = () => {
if (window.BlipChat && !window.blipChatInitialized) {
const blipChat = new window.BlipChat();
blipChat
.withAppKey(blipChatKey)
.withButton({
color: "#058963",
icon: "",
})
.build();

window.blipChatInitialized = true;
}
};

document.body.appendChild(script);
}
}, blipChatKey]);

return null;
};

export default BlipChatComponent;

Após isso basta importar o componente na tela de sua escolha, no meu caso, eu coloquei no arquivo app/layout.tsx antes do fechamento da tag body, pra mim funcionou perfeitamente, talvez funcione para outros.


Comente