docs/platform/integrations/chat/zulip.mdx
Zulip does not need any API Key or client ID to push messages in it. All it needs is the webhook URL of the channel you want to send messages to. That itself acts as the credential.
Similar to Discord, the credential for this provider needs to be stored in the subscriber entity.
Sign up or Login to your Zulip account.
Click on the Settings icon in the top right corner of the screen, and then click "Personal settings" from the drop-down menu.
Slack compatible webhook, choose your channel and copy webhook URL.The URL generated above will be the target channel of a subscriber that you want to integrate with. To make this connection, you have to:
Copy the URL that you generated above
Update the subscriber credentials with this URL using the Zulip provider id. You can do this step by using the @novu/api library, as shown below:
const novu = new Novu({ secretKey: "<NOVU_SECRET_KEY>" });
await novu.subscribers.credentials.update( { providerId: ChatOrPushProviderEnum.Zulip, integrationIdentifier: "zulip-MnGLxp8uy", credentials: { webhookUrl: "<WEBHOOK_URL>", }, }, "subscriberId" );
</Tab>
<Tab title="Python">
```python
import os
import novu_py
from novu_py import Novu
with Novu(secret_key=os.getenv("NOVU_SECRET_KEY", "")) as novu:
novu.subscribers.credentials.update(
subscriber_id="subscriberId",
update_subscriber_channel_request_dto={
"provider_id": novu_py.ChatOrPushProviderEnum.ZULIP,
"credentials": {"webhookUrl": "<WEBHOOK_URL>"},
"integration_identifier": "zulip-MnGLxp8uy",
},
)
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
res, err := s.Subscribers.Credentials.Update(context.Background(), "subscriberId", components.UpdateSubscriberChannelRequestDto{ ProviderID: components.ChatOrPushProviderEnumZulip, IntegrationIdentifier: novugo.String("zulip-MnGLxp8uy"), Credentials: components.ChannelCredentials{ WebhookURL: novugo.String("<WEBHOOK_URL>"), }, }, nil)
</Tab>
<Tab title="PHP">
```php
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()->setSecurity('<NOVU_SECRET_KEY>')->build();
$sdk->subscribersCredentials->update(
subscriberId: 'subscriberId',
updateSubscriberChannelRequestDto: new Components\UpdateSubscriberChannelRequestDto(
providerId: Components\ChatOrPushProviderEnum::Zulip,
integrationIdentifier: 'zulip-MnGLxp8uy',
credentials: new Components\ChannelCredentials(
webhookUrl: '<WEBHOOK_URL>',
),
),
);
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.Subscribers.Credentials.UpdateAsync( subscriberId: "subscriberId", updateSubscriberChannelRequestDto: new UpdateSubscriberChannelRequestDto() { ProviderId = ChatOrPushProviderEnum.Zulip, IntegrationIdentifier = "zulip-MnGLxp8uy", Credentials = new ChannelCredentials() { WebhookUrl = "<WEBHOOK_URL>", }, });
</Tab>
<Tab title="Java">
```java
import co.novu.Novu;
import co.novu.models.components.*;
import java.util.List;
Novu novu = Novu.builder().secretKey("<NOVU_SECRET_KEY>").build();
novu.subscribers().credentials().update()
.subscriberId("subscriberId")
.body(UpdateSubscriberChannelRequestDto.builder()
.providerId(ChatOrPushProviderEnum.ZULIP)
.integrationIdentifier("zulip-MnGLxp8uy")
.credentials(ChannelCredentials.builder()
.webhookUrl("<WEBHOOK_URL>")
.build())
.build())
.call();
subscriberId is a custom identifier used when identifying your users within the Novu platform.providerId is a unique provider identifier. We recommend using our ChatOrPushProviderEnum to specify the provider.webhookUrl property to specify the Zulip channel webhook URL or by calling the Update Subscriber Credentials endpoint on Novu API. Check endpoint details here.